RegEx для сопоставления номеров от 0,00 до 50,00 - PullRequest
2 голосов
/ 10 мая 2019

Как я могу получить выражение регулярного выражения, которое позволяет:

0,00 до 50,00, а также запятую в качестве десятичного разделителя, так От 0,00 до 50,00

Я дошел до ([0-5] {1})? ([0-9] {1}) ([,] [0-9] {1,2})? но есть все еще ситуации, в которых это терпит неудачу. Я искал онлайн, но не смог найти правильный ответ.

ДОБАВЛЕНО: Небольшое изменение в требованиях. На самом деле это должно быть от 0,01 до 50,00 и от 0,01 до 50,00. (Но с ответами ниже я думаю, что мне удалось адаптировать строки регулярных выражений, так что это также соответствует)

Ответы [ 3 ]

2 голосов
/ 10 мая 2019

Здесь есть регулярное выражение для генератора диапазона . Сгенерировал и поиграл с этим, придумал этот

^(?:[1-4]?\d[.,]\d\d?|50[.,]00?)$

Добавлена ​​группа без захвата, небольшие модификации и ^ начальная / $ конечная привязка. См. Демонстрацию на regex101 .
Для дополнительной десятичной части, как об этом: ^(?:[1-4]?\d(?:[.,]\d\d?)?|50(?:[.,]00?)?)$

2 голосов
/ 10 мая 2019

Это регулярное выражение должно охватывать почти все случаи, соответствующие числам от 0.00 до 50.00,

^(?=.)(?:(?:(?:0|[1-4]?\d)?(?:[,.]\d{1,2})?)|50(?:[.,]00?)?)$

Пояснение:

  • ^ - начало строки
  • (?=.) - Позитивный взгляд вперед, чтобы избежать совпадения с пустой строкой
  • (?: - Начало первого шаблона не группирования
    • (?: - начало второго шаблона не группирования
    • (?:0|[1-4]?\d)? - соответствует целому числу от 0 до 49, и это целое число может отсутствовать
    • (?:[,.]\d{1,2})? - соответствует запятой или точке, за которой следуют одна или две цифры, и эта десятичная часть может отсутствовать
    • ) - Закрытие второго шаблона не группирования
  • | - Чередование для корпуса № 50
  • 50(?:[.,]00?)?) - Совпадения 50, за которыми следуют запятая или точка, за которой следует 0 или 00, где десятичная часть необязательна
  • ) - Закрытие первого шаблона без группировки
  • $ - конец строки

Regex Demo

Edit: Чтобы отбросить числа с нулевыми значениями, вы можете просто добавить отрицательный прогноз (?!0*[.,]?0*$) в текущее регулярное выражение и использовать это регулярное выражение,

^(?=.)(?!0*[.,]?0*$)(?:(?:(?:0|[1-4]?\d)?(?:[,.]\d{1,2})?)|50(?:[.,]00?)?)$

Демонстрация регулярных выражений с отклонением нулевых чисел

0 голосов
/ 10 мая 2019

это у вас работает?

(50([.,]0{1,2})?)|([0-4]?[0-9]([.,][0-9]{1,2})?)

...