Подтвердить что ты не робот

Regex Соответствующие номера с плавающей запятой

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

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

Он соответствует номерам, но также соответствует 3.5.4:

  • 3,5
  • 0,4 ​​

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

1,2. не разрешено
.3 разрешено

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

4b9b3361

Ответ 1

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

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

Здесь версия, которая точно соответствует вашим, но которая не будет выполнять частичные совпадения:

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

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

Ответ 2

Чтобы соответствовать номеру 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]+)?$

Ответ 3

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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