Регулярное выражение для плавающей запятой? - PullRequest
2 голосов
/ 08 февраля 2012

Я пытаюсь написать RegEx для проверки числа с плавающей запятой. Вот что мне удалось до сих пор:

/^[-+]?[1-9]\d{0,2}(\.\d{1,1})?/

Номер действителен, если:

  • положительный или отрицательный
  • Макс. Из 2 цифр (десятков или сотен)
  • Цифра сотых не может 0 (только 1-9)
  • Масштаб не более 1
  • Десятичное значение может быть 0 или 5 или вообще не иметь значения

Таким образом, эти числа будут действительными, например:

  • 1,5
  • -1,5
  • 17,5
  • 15
  • 30,5

Эти числа будут недействительными, например:

  • 1,57
  • 3041,5
  • 17,59
  • 915
  • -1,56
  • 05,0

Ответы [ 5 ]

7 голосов
/ 08 февраля 2012

Как насчет Float(number) (перехватывать исключения для обнаружения ошибок разбора), а затем проверять число с плавающей запятой?Это будет легче для некоторых свойств, чем написание регулярного выражения.Если вам нужно принудительно использовать подмножество синтаксиса, принятого Ruby (почему?), Проверяйте только эту часть с помощью регулярного выражения.

2 голосов
/ 08 февраля 2012

Как я уже сказал в комментариях - будет учитываться ваша первая ненулевая цифра, затем вы добавите еще две - теперь будут разрешены трехзначные числа, такие как 915. Чтобы решить эту проблему, используйте регулярное выражение ( с вашими тестовыми примерами ):

^[+-]?(?:(?!0)\d{1,2}|0)(?:\.[05])?$

Я использую отрицательный прогноз (?!0), чтобы убедиться, что первая цифра не является нулем, а затем просто требуется требуемое количество цифр. Это также позволяет 0.5 и тому подобное через |0 дизъюнкцию. Если вы предпочитаете .5, это будет так:

^[+-]?(?!0)\d{,2}(?:\.[05])?$

Если вы хотите запретить 3.0 (разрешено вашими правилами) и разрешить только 3 (как вы подразумеваете в примерах), замените последнюю часть:

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

Однако, это гораздо менее читабельно, чем @ Arkku's nice Float(number); используйте регулярные выражения, если они вам действительно нужны.

0 голосов
/ 06 июня 2012
/^[-+]?\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

0 голосов
/ 03 июня 2012

В соответствии с вашими действительными и недействительными примерами: Regex для числа с плавающей запятой?

Это регулярное выражение будет работать:

 ^[+-]?([1-9][0-9]?|0)(\.[05])?$
0 голосов
/ 08 февраля 2012

Вот целая веб-страница о проверке чисел с плавающей точкой в ​​регулярных выражениях: http://www.regular -expressions.info / floatpoint.html

Тем не менее,

  • {1,1} эквивалентно {1}, что эквивалентно тому, что его вообще не ставить, поэтому вы можете удалить его
  • Если вы хотите убедиться, что 0.5xyz не проходит, добавьте $в конце

С учетом вышеуказанных изменений это будет выглядеть так: /^[-+]?[1-9]\d{0,2}(\.\d)?$/

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