2015-09-08 2 views
3

Я пытаюсь найти регулярное выражение, которое принимает максимум 5 цифр до десятичной и максимум 2 цифры после десятичной. Десятичная часть является необязательной и не должна принимать, если 0 - единственная цифра. Но принимает, если за 0 следуют другие цифры после или до десятичного. Например:regex для проверки цены

Допустимые данные: 12345.12,123.12,0.12,00.12,1.2,0123.12

Недействительные данные: 0,00,000,0000,00000

Я сделал это выражение ^\d{0,5}(\.\d{1,2})?$" но это не работает, если цифра начинается с 0.

+0

Вы разрешаете пустые строки и значения типа '00001.01'? –

+0

пустая строка не разрешена, но значения, такие как 00001.01, действительны –

ответ

4
^(?!0+$)\d{0,5}(.\d{1,2})?$ 

^^^^^^^ 

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

EDIT:

Если вы не хотите, чтобы 0.0 Используйте

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

спасибо, кажется, работает –

+0

@KarishmaGermanwala действительно согласен, если он сработал для вас – vks

0

Это также работает:

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

(?!(\.|,)0{2}) утверждает число не содержит только 0 с после запятой ,

Demo on regex101

0

пустая строка не допускается, но значения, как 00001.01 действует

Вы можете использовать следующее регулярное выражение с отрицательным просмотровых-aheads, которые проверяют для отвергнутых значений:

^(?!$)(?!0+$)\d{0,5}(?:\.(?!0{1,2}$)\d{1,2})?$ 
    ^^^^^ ^^^^^    ^^^^^^^^^ 

См. demo

Регулярное выражение Разбивка:

  • ^ - начало строки
  • (?!$) - убедитесь, что строка не пуста (конец строки не появляется сразу после начала)
  • (?!0+$) - убеждается целое число номер не состоит только из нулей
  • \d{0,5} - от 0 до 5 цифр
  • (?:\.(?!0{1,2}$)\d{1,2})? - необязательная последовательность ...
    • \. - десятичный период
    • (?!0{1,2}$)\d{1,2} - 2 или 1 цифра (\d{1,2}), не 0 или 00 ((?!0{1,2}$))
  • $ - конец строки
+0

Я обновил свой ответ, и кажется, что только мое регулярное выражение не разрешает пустые строки и только '0000',' 0000.0' или '0000.00'. –

Смежные вопросы