Регулярное выражение для соответствия 2 цифрам, необязательное десятичное число, две цифры - PullRequest
33 голосов
/ 18 июня 2009

Я потратил полчаса, пытаясь получить это, может быть, кто-то может придумать это быстро.

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

Например, он должен полностью соответствовать следующим строкам:

3
33
0,3
+0,33
33,3
33,33

и НЕ сопоставлять что-либо с более чем 2 цифрами до или после десятичной точки.

Ответы [ 10 ]

58 голосов
/ 18 июня 2009

РЕДАКТИРОВАТЬ: Изменено в соответствии с другими отзывами.

Я понял, что вы имеете в виду, что если нет десятичной точки, то не должно быть еще двух цифр. Так и должно быть:

\d{0,2}(\.\d{1,2})?

Это должно сработать в большинстве реализаций. Если нет, вы можете использовать:

[0-9]?[0-9]?(\.[0-9][0-9]?)?

И это должно работать на каждой реализации, которую я видел.

7 голосов
/ 18 июня 2009
(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])

Соответствует:

  • Ваши примеры
  • 33

Не соответствует:

  • 333,33
  • 33,333
4 голосов
/ 18 июня 2009

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

Если каждое число является отдельной строкой, вы можете использовать якоря строки :

^\d{0,2}(\.\d{1,2})?$

Если каждое число находится в строке, вы можете использовать слово привязки :

\b\d{0,2}(\.\d{1,2})?\b
3 голосов
/ 18 июня 2009

Вы упомянули, что хотите, чтобы регулярное выражение совпадало с каждой из этих строк, но ранее вы упоминали, что перед десятичной дробью стоит 1-2 цифры?

Это будет соответствовать 1-2 цифрам, за которыми следует возможный десятичный знак, за которым следуют еще 1-2 цифры, но FAIL на вашем примере .33

\d{1,2}\.?\d{1,2}

Это будет соответствовать 0-2 цифрам, за которыми следует возможное десятичное число, затем еще 1-2 цифры и совпадение на вашем примере .33

\d{0,2}\.?\d{1,2}

Не уверен, какой именно вы ищете.

1 голос
/ 25 июня 2019

вы можете использовать

let regex = new RegExp ( ^(?=[0-9.]{1,${maxlength}}$)[0-9]+(?:\.[0-9]{0,${decimal_number}})?$ );

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

Используйте ES6-строку для интерполяции переменных $ {maxlength} и ​​$ {decimal_number}.

1 голос
/ 18 июня 2009
^(\d{0,2}\\.)?\d{1,2}$

\d{1,2}$ соответствует 1-2-значному номеру, после которого ничего не указывается (3, 33 и т. Д.), (\d{0,2}\.)? необязательно соответствует 0-2-значному числу, за которым следует точка (3. , 44., . и т. Д.). Соедините их вместе, и вы получите свое регулярное выражение.

0 голосов
/ 06 ноября 2013

Ниже приведено очень хорошее регулярное выражение для двух цифр и двух десятичных знаков.

[RegularExpression(@"\d{0,2}(\.\d{1,2})?", ErrorMessage = "{0} must be a Decimal Number.")]
0 голосов
/ 07 июня 2013

Попробуйте это

\d{1,2}\.?(\.\d{1,2})?
0 голосов
/ 18 июня 2009

Предыдущий ответ в основном правильный, но он также будет соответствовать пустой строке. Следующее решило бы это.

^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$
0 голосов
/ 18 июня 2009
^\d{0,2}\.?\d{1,2}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...