Как написать регулярное выражение для проверки переменной по 0-100 или е - PullRequest
0 голосов
/ 11 февраля 2010

Я хотел бы написать регулярное выражение для проверки и ввода поля со следующими аргументами:

  1. поле обязательно для заполнения (не может быть пустым)
  2. поле не должно быть отрицательнымполе число
  3. должно быть допустимым десятичным числом с точностью до двух десятичных знаков (например, 1 или 1,3 или 1,23) * поле 1008 *
  4. может быть любым допустимым числом от 0 до 100 или 'e'

Ответы [ 4 ]

3 голосов
/ 11 февраля 2010

Регулярные выражения находят широкое применение при проверке формата, но вы хотите использовать его для подмножества анализа чисел с плавающей запятой и проверки границ. Будьте добры к себе и человеку, который будет поддерживать ваш код после того, как вы уйдете: проверьте, является ли это буквой 'e', ​​иначе прочитайте его в плавающем порядке и проверьте границы.

1 голос
/ 11 февраля 2010

Вы можете использовать: ^(100|\d{1,2}(\.\d{1,2})?|e)$

Однако было бы проще и удобочитаемее использовать функции синтаксического разбора / приведения типов вашего языка.

РЕДАКТИРОВАТЬ: Некоторые вариации на основе комментариев:

Допускается 100,0 и 100,00: ^(100(\.0{1,2})?|\d{1,2}(\.\d{1,2})?|e)$

Запрещение начальных нулей: ^(100(\.0{1,2})?|[1-9]?\d(\.\d{1,2})?|e)$

0 голосов
/ 11 февраля 2010
^(?:100|\d{1,2}(?:\.\d{1,2})?|e)$
0 голосов
/ 11 февраля 2010

Хм, это у вас работает?

^((100|[0-9]{1,2})(\.[0-9]{1,2})?)|(e)$

Для чего это среда? Какой-либо конкретный стандарт регулярных выражений, которого он должен придерживаться?

Ограничения на числовые значения (такие как «> 100» или «<= 5.3») могут сделать регулярные выражения довольно сложными. Эти типы противопоказаний лучше проверяются в логике приложения. Тогда вы можете иметь более простой (и более легкий для понимания) шаблон: </p>

^(([0-9]{1,3})(\.[0-9]{1,2})?)|(e)$

А затем извлеките группу захвата для первых 3 цифр и подтвердите это отдельно.

Edit: Хорошо, я думаю, что это нужно сделать (последний, потому что мои глаза устают):

^(100(\.0{1,2})?)|([0-9]{1,2})(\.[0-9]{1,2})?|(e)$

Также позволит 100,00 или 100,0

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