Installshield выдает ошибку & ldquo; Новая версия уже присутствует & rdquo; для незначительного обновления

Использование регулярных выражений для проверки числового диапазона

Чтобы быть ясным: если достаточно простого оператора if

if(num < -2055  ||  num > 2055)  {
   throw  new IllegalArgumentException("num (" + num + ") must be between -2055 and 2055");
}

To ясно: если достаточно простого оператора if

, использование регулярных выражений для проверки числовых диапазонов не рекомендуется.

Кроме того, поскольку регулярные выражения анализируют строки, номера должны сначала переводиться в строку перед тем, как они могут быть протестированы. Исключением является то, что число уже является строкой, например, при получении пользовательского ввода с консоли.

(Чтобы гарантировать, что строка начинается с номера, вы можете использовать org.apache.commons.lang3.math.NumberUtils#isNumber(s))

Кроме того, поскольку регулярные выражения анализируют строки, номера сначала должны быть переведены в строку перед их тестированием. Исключение составляет то, что число уже является строкой, например, при получении пользовательского ввода с консоли.

Несмотря на это, выяснение того, как проверять диапазоны чисел с регулярными выражениями, является интересным и

(Ссылки в этом ответе взяты из Часто задаваемых вопросов регулярных выражений переполнения стека .)

A один диапазон номеров

(Чтобы гарантировать, что строка начинается с номера, вы можете использовать org.apache.commons.lang3.math.NumberUtils#isNumber(s))

\b15\b

Правило: Число должно быть точно 15.

Самый простой диапазон. Регулярное выражение соответствует

Границы слова необходимы, чтобы избежать соответствия 15 внутри 8215242.

\b(15|16)\b
\b1(5|6)\b
\b1[5-6]\b

Диапазон двух чисел

Правило: Число должно быть между 15 и 16. Вот три возможных регулярных выражения:

(Группы необходимы для «или» -инга, но они могут быть не захватывающими : \b(?:15|16)\b)

\b(\d|1[0-2])\b

Диапазон номеров "зеркальный" вокруг нуля

\b(         //The beginning of a word (or number), followed by either
   \d       //   Any digit 0 through 9
|           //Or
   1[0-2]   //   A 1 followed by any digit between 0 and 2.
)\b         //The end of a word

Правило: Число должно быть между -12 и 12.

-?\b(\d|1[0-2])\b

Здесь является регулярным выражением для 0 через 12, только с положительным значением:

Свободно-разнесенный:

(?

Выполнение этой работы как для отрицательной, так и для положительной так же просто, как добавление необязательная тире в начале:

(Предполагается, что перед тире не должно быть никаких недопустимых символов.)

Чтобы запретить отрицательные числа, отрицательный lookbehind необходимо:

Правило: Число должно быть между -12 и 12.

Выход из внешнего вида приведет к тому, что 11 в -11 будет соответствовать. (Первый пример в этом сообщении должен содержать это.)

Примечание: \d по сравнению с [0-9]

Вот регулярное выражение для 0 - 12, только для положительного:

(?

Чтобы быть совместимым со всеми ароматами регулярных выражений, все \d -s следует изменить на [0-9] . Например, .NET рассматривает не ASCII-номера, например, на разных языках, как законные значения для \d. За исключением последнего примера, для краткости он оставлен как \d.

   (?

Свободно-разнесенный:

\b(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|283|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299|300|301|302|303|304|305|306|307|308|309|310|311|312|313|314|315|316|317|318|319|320|321|322|323|324|325|326|327|328|329|330|331|332|333|334|335|336|337|338|339|340|341|342|343|344|345|346|347|348|349|350|351|352|353|354|355|356|357|358|359|360|361|362|363|364|365|366|367|368|369|370|371|372|373|374|375|376|377|378|379|380|381|382|383|384|385|386|387|388|389|390|391|392|393|394|395|396|397|398|399|400)\b

(С благодаря @TimPietzcker )

Три цифры, причем все, кроме первой цифры, равны нулю

работа как с отрицательной, так и с положительной так же просто, как добавление опциональной в начале:

Правило: Должно быть между 0 и 400.

(-?\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?

Возможное регулярное выражение:

Свободное разнесение:

Другая возможность, которая никогда не должна использоваться:

(             //Capture group for the entire number
   -?\b             //Optional dash, followed by a word (number) boundary
   (?:20            //Followed by "20", which is followed by one of 
         (?:5[0-5]        //50 through 55
           |                  //or
         [0-4][0-9])      //00 through 49
      |                                         //or
         1[0-9]{3}        //a one followed by any three digits
      |                                         //or
         [1-9][0-9]{0,2}  //1-9 followed by 0 through 2 of any digit
      |                                         //or
         (?

Окончательный пример: четыре цифры, отраженные вокруг нуля, которые не заканчиваются нулями.

Правило: Должно быть между -2055 и 2055

Это из вопроса в stackoverflow.

(-?\b(?:20(?:5[0-5]|[0-4][0-9])|1?[0-9]{1,3})\b)

Regex:

-?\b(20(5[0-5]|[0-4][0-9])|1?[0-9]{1,3})\b

Regular expression visualization [/g29]

  import  java.util.Scanner;
  import  java.util.regex.Matcher;
  import  java.util.regex.Pattern;
  import  org.apache.commons.lang.math.NumberUtils;
/**
  

Confirm a user-input number is a valid number by reading a string an testing it is numeric before converting it to an it--this loops until a valid number is provided.

{@code java UserInputNumInRangeWRegex}

**/ public class UserInputNumInRangeWRegex { public static final void main(String[] ignored) { int num = -1; boolean isNum = false; int iRangeMax = 2055; //"": Dummy string, to reuse matcher Matcher mtchrNumNegThrPos = Pattern.compile("(-?\\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?

Debuggex Demo

Возможное регулярное выражение:

[C:\java_code\]java UserInputNumInRangeWRegex
Enter a number between -2055 and 2055: tuhet
Not a number. Try again.
Enter a number between -2055 and 2055: 283837483
Not in range. Try again.
Enter a number between -2055 and 2055: -200000
Not in range. Try again.
Enter a number between -2055 and 2055: -300
Number: -300

Свободно-разнесенный:

Свободный интервал:

(-?\b(?:20(?:5[0-5]|[0-4][0-9])|1[0-9]{3}|[1-9][0-9]{0,2}|(?

(Wi th благодаря PlasmaPower и Casimir et Hippolyte для помощи при отладке.)

Конечная нота

0
задан bharat sangale 5 March 2019 в 06:45
поделиться

1 ответ

https://docs.microsoft.com/en-us/windows/desktop/Msi/productversion утверждает:

Значением свойства ProductVersion является версия продукта в> строковом формате. Это свойство ТРЕБУЕТСЯ.

Формат строки следующий:

major.minor.build

Первое поле является основной версией и имеет максимальное значение 255. Второе поле является второстепенным версия и имеет максимальное значение 255. Третье поле называется версией сборки или версией обновления и имеет максимальное значение 65 535.

0
ответ дан cvechelp 5 March 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: