Регулярное выражение десятичного диапазона от 0,025 до 99,999 - PullRequest
0 голосов
/ 25 сентября 2018

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

Мне нужно регулярное выражение в качестве шаблона для целей проверки, которое находится в диапазоне от 0.025 до 99.999, но должно также соответствовать целым числам и любым возможным десятичным формам до 3 десятичных знаков:

1 - соответствует

1.0 - соответствует

1.000 - соответствует

0,025 - соответствует

0,03 - соответствует

0,01 - не соответствует

0,024 - не соответствует

Пока мое регулярное выражение выглядит так:

^(?!0*(\.0+)?$)([1-9]?[0-9]\.[0-9]{0,3}|[1-9]?[0-9])?$

На самом деле оно соответствует всем между0.001 и 99.999, потому что удалось исключить 0 с десятичными формами, но не знаю, как проще всего исключить 0.001 до 0.024.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Чтобы сделать это с регулярным выражением, вам нужно что-то немного сложное:

^(?:0\.02[5-9]|0\.0[3-9]\d?|0\.[1-9]\d{0,2}|[1-9][0-9]?(?:\.\d{1,3})?)$

Вот это в Regex101

Вот как это работает в JS

const regex = /^(?:0\.02[5-9]|0\.0[3-9]\d?|0\.[1-9]\d{0,2}|[1-9][0-9]?(?:\.\d{1,3})?)$/;

const testValues = [ "0", "1", "99.999", "0.025", "0.024", "0.01" ];

testValues.forEach(value => console.log(value, regex.test(value)));

Пояснение к выражению: это набор OR, которые охватывают диапазон значений.Хотя вы можете сжать его больше, я постарался сохранить его логичным и читабельным:

  • 0\.02[5-9] - значения от 0.025 до 0.029
  • 0\.0[3-9]\d? -значения от 0.03 до 0.099.Последняя цифра необязательна.
  • 0\.[1-9]\d{0,2} - значения от 0.1 до 0.999.Последние две цифры необязательны.Дробная часть в каждом случае до настоящего времени является обязательной, поэтому 0 недопустимо.
  • [1-9][0-9]?(?:\.\d{1,3}) - значения от 1 до 99,999.Опять же, десятичная точка и дробная часть устанавливаются как необязательные.Если они присутствуют, их может быть 1-3.
  • , все регулярное выражение помещается в группу без захвата, а затем вкладывается между якорями ^ и $, чтобы убедиться, что строка ВСЕ соответствует.

Известные исключения с этим регулярным выражением:

  • экспоненциальная форма / научная запись.Например: 3e1 или 3e-1
  • числа, начинающиеся с нуля.Например: 01, 02.345
  • числа, начинающиеся со знака.Например: +10
  • значения, начинающиеся с десятичной части.Например: 0.2, 0.123
  • значения, заканчивающиеся точкой.Например, строки 1., 2.
  • , содержащие пробел.Например: " 1" не будет соответствовать.Самый простой способ решить эту проблему - убедиться, что значения обрезаны перед тестированием.
0 голосов
/ 25 сентября 2018

в javascript вы можете просто преобразовать строку в число и использовать логику, подобную этой

const str = '1.0'
const test = +str;

if(test >= 0.025 && test <= 99.999) {
  console.log('valid');
}

IMO, это будет проще и легче читать

РЕДАКТИРОВАТЬ:

как упоминалось в комментариях, это будет проходить для таких строк, как 3e-2, который является допустимым синтаксисом в javascript для определения чисел, поэтому вам, возможно, придется обрабатывать этот случай на основе вашего варианта использования.

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