2016-05-24 4 views
1

Я пытаюсь выяснить выражение регулярных выражений, которое делает следующее. Оба условия ниже должны быть правдой: 1) Между 0 и 100 включительно 2) Может содержать только один или два десятичных знака, но не обязательно.Regex диапазон от 0 до 100, включая два десятичных числа

Он не должен позволять 100.01 или 100,1 100 максимальное значение, или 100,0 или 100,00

Я попытался ^(100(?:\.00)?|0(?:\.\d\d)?|\d?\d(?:\.\d\d)?)$ , который помог мне в this question , но это не принимает 99.0 (один десятичный). Я, наверное, очень близко.

ответ

2

Вам просто нужно сделать каждый второй десятичной цифры по выбору:

^(?:100(?:\.00?)?|\d?\d(?:\.\d\d?)?)$ 
      ^    ^

См updated regex demo. Альтернатива 0(?:\.\d\d)? покрыта \d?\d(?:\.\d\d)? одной (согласно Sebastian's comment) и может быть удалена.

Коэффициент квантора ? соответствует одному или нулевому значению подшаблона, который он количественно определяет. Подробнее

шаблон:

  • ^ - начало строки
  • (?: - начало чередованием группы:
    • 100(?:\.00?)? - 100, 100.0 или 100.00 (The .00 не является обязательным, и последний 0 не является обязательным, тоже)
    • \d?\d(?:\.\d\d?)? - необязательная цифра, за которой следует обязательная цифра, сопровождаемая необязательной последовательностью точки, цифрой и необязательной цифрой.
  • ) - конец чередующейся группы
  • $ - конец строки.
+1

'0 (?: \. \ D \ d?)?' Уже покрывается '\ d? \ D (?: \. \ D \ d?)?' - так почему бы не удалить его? –

+0

@SebastianProske: Я просто сосредоточился на главном пункте - сделав второй десятичный вариант необязательным. Да, правда, это покрыто. –

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