#javascript #regex
#javascript #регулярное выражение
Вопрос:
Я пытаюсь создать регулярное выражение, позволяющее использовать значения от 0 до 365 с необязательными десятичными дробями, но 365 должно содержать все необязательные десятичные цифры только как 0.
^(0?[0-9]?[0-9]|[1-2][0-9][0-9]|3[0-5][0-9])(.d )|(36[0-5])(.[0] )?$
Это принимает только 365 и 365, за которыми следуют десятичные знаки, такие как (365.0, 365.00), но оно принимает только десятичные числа 1.0, 10.0, 100.0, а не без десятичных знаков 1,10,100 не уверен, что происходит. буду признателен за любую помощь.
Комментарии:
1.
(?:[12]?d{1,2}|3[0-5]d|36[0-4])(?:.d )?|365(?:.0 )?
2. Правильным ответом было бы: сопоставьте все возможные цифры и сравните их программно. Хотя это возможно с помощью регулярных выражений, это, скорее всего, не поддерживается, и вы наверняка забудете значение через пару недель.
3. Похоже, что регулярное выражение здесь является неправильным решением, где и зачем вам нужно это регулярное выражение? Почему бы просто не использовать что-то вроде
Number.isNaN(Number.parseFloat(value)) amp;amp; value < 365
и т.д.?
Ответ №1:
Либо используйте (см. демонстрацию на regex101.com )
^(?:d|[1-9]d|[12]d{2}|3[0-5]d|36[0-4]|365.0*)(?:.d )?$
Или (лучше!):
^d (?:.d )?$
и впоследствии программно сравнивать значения.
Последнее может быть:
let data = `0.00
123.2121212
365.00
365.11
-1000
299
1000
365.1`;
let regex = /^d (?:.d )?$/gm;
while (found = regex.exec(data)) {
number = parseFloat(found[0]);
if (number >= 0 amp;amp; number <= 365) {
console.log(number " (" found[0] ")");
}
}