Подтвердить что ты не робот

Регулярное выражение соответствует двум цифрам, необязательным десятичным, двум цифрам

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

(?<![\d.])(\d{1,2}|\d{0,2}\.\d{1,2})?(?![\d.])

Матчи:

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

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

  • 333,33
  • 33,333

Ответ 3

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

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

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

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

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

Ответ 4

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

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

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

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

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

Не уверен, что именно вы ищете.

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

^([0-9]?[0-9](\.[0-9][0-9]?)?)|([0-9]?[0-9]?(\.[0-9][0-9]?))$

Ответ 8

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

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

Ответ 9

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

[RegularExpression(@"\d{0,2}(\.\d{1,2})?", ErrorMessage = "{0} must be a Decimal Number.")]

Ответ 10

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

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

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

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