Regex для плавающей запятой?
Я пытаюсь написать RegEx для проверки числа с плавающей запятой. Вот что мне удалось:
/^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/
Номер действителен, если:
- Либо положительный, либо отрицательный
- Максимум 2 цифры (десятки или сотни)
- Сотни цифр не могут 0 (только 1-9)
- Масштаб не более 1
- Десятичное значение может быть 0 или 5 или вообще не равно
Таким образом, эти числа будут действительны, например:
Эти числа недействительны, например:
- 1,57
- 3041,5
- 17.59
- 915
- -1,56
- 05,0
Ответы
Ответ 1
Как я уже сказал в комментариях, ваша первая ненулевая цифра будет подсчитываться, тогда вы добавите еще две, которые теперь позволят трехзначные числа, такие как 915
. Чтобы решить эту проблему, regexp (с вашими тестовыми окнами):
^[+-]?(?:(?!0)\d{1,2}|0)(?:\.[05])?$
Я использую отрицательный lookahead (?!0)
, чтобы убедиться, что первая цифра не равна нулю, а затем просто требует требуемое количество цифр. Он также позволяет 0.5
и аналогично с помощью дизъюнкции |0
. Если вы предпочитаете .5
, это будет следующим:
^[+-]?(?!0)\d{,2}(?:\.[05])?$
Если вы хотите запретить 3.0
(разрешено вашими правилами) и разрешить только 3
(как вы подразумеваете в примерах), замените последнюю часть:
^[+-]?(?:(?!0)\d{1,2}|0)(?:\.5)?$
Однако это гораздо менее читаемо, чем @Arkku nice Float(number)
; используйте регулярные выражения, если они вам действительно нужны.
Ответ 2
Как насчет Float(number)
(исключение catch для обнаружения ошибок синтаксического анализа), а затем проверить число с плавающей запятой? Это будет легче для нескольких свойств, чем для написания регулярного выражения. Если вам нужно заставить подмножество синтаксиса, принятого Ruby для использования (почему?), Проверьте только ту часть с регулярным выражением.
Ответ 3
Вот целая веб-страница по проверке поплавков в регулярных выражениях: http://www.regular-expressions.info/floatingpoint.html
Тем не менее,
-
{1,1}
эквивалентен {1}
, который эквивалентен не помещению его вообще, поэтому вы можете удалить его
- Если вы хотите убедиться, что
0.5xyz
не проходит, добавьте $
в конец
С приведенными выше изменениями это будет выглядеть так: /^[-+]?[1-9]\d{0,2}(\.\d)?$/
Ответ 4
В соответствии с вашими действительными и недопустимыми примерами: Regex для плавающей запятой?
Это регулярное выражение будет работать:
^[+-]?([1-9][0-9]?|0)(\.[05])?$
Ответ 5
/^[-+]?\d{0,2}(\.[05])?(?!\d)$/
Соответствует, когда:
-
Значение является либо положительным, либо отрицательным
-
величина меньше 100. В диапазоне (-99.5 to 99.5)
-
Десятичное значение .0
или .5
или отсутствует (другими словами, .0
или .5
или отсутствует)
Таким образом, эти числа будут действительны, например:
1.5
-1.5
17.5
15
-3
30.5
-10.0
99.5
Эти числа недействительны, например:
1.57
3041.5
17.59
915
-1.56
05.0
99.6