Regex Совпадение чисел с плавающей запятой - PullRequest
12 голосов
/ 26 января 2010

У меня есть этот шаблон:

[0-9]*\.?[0-9]

Соответствует числам, но также соответствует 3.5.4 как:

  1. 3,5
  2. 0,4

Как это исправить (этот вход не должен совпадать)?
UPDATE:
это также должно работать на входе: 1 3,5,4 10

1.2. не допускается
.3 разрешено

Запрещается использовать любой символ, который не является числовым, например: a1 2.4f 3. 45, 67!

Ответы [ 5 ]

12 голосов
/ 21 июня 2011

Для совпадения с номером JSON:

^[-]?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?$

JSON number

Используйте это регулярное выражение для соответствия .123:

^[-]?((0|[1-9][0-9]*)(\.[0-9]+)?|\.[0-9]+)([eE][+-]?[0-9]+)?$
10 голосов
/ 26 января 2010

Обновлен ответ после комментария от автора:

Используйте lookahead / lookbehind, чтобы убедиться, что символы до и после являются пробелами:

Вот версия, которая близко соответствует вашей, но не будет частичных:

(?:^|(?<=\s))[0-9]*\.?[0-9](?=\s|$)

Для обоих этих примеров при запуске на строке 1 2.3.4 5.6 он соответствует только 1 и 5.6.

7 голосов
/ 26 января 2010

Вы должны решить, хотите ли вы принимать числа без начальных нулей (например, 123). Если нет, то регулярное выражение легко:

^-?[0-9]+(\.[0-9]+)?$

Если вы это сделаете, то это немного сложнее:

^-?(?:[0-9]+|[0-9]*\.[0-9]+)$

Оба предполагают, что за десятичной точкой должна следовать хотя бы одна цифра. Если вы не принимаете отрицательные числа, то в начале -? нет необходимости.

2 голосов
/ 26 января 2010

Ваше регулярное выражение не привязано. Если вы хотите сопоставить строки, которые содержат только цифры и ничего больше, используйте:

^[0-9]*\.?[0-9]$
1 голос
/ 26 января 2010

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

Вместо этого вы должны использовать встроенные методы синтаксического анализа чисел вашего языка.

Я предполагаю, что из ваших других вопросов вы используете Javascript; если это так, вы должны позвонить parseFloat.

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