Regex Соответствующие номера с плавающей запятой
У меня есть этот шаблон:
[0-9]*\.?[0-9]
Он соответствует номерам, но также соответствует 3.5.4:
Как исправить это (этот вход не должен совпадать)?
UPDATE:
это также должно работать на входе:
1 3,5,4 10
1,2. не разрешено
.3 разрешено
любой char, который не является символом числа, не разрешен, например: a1 2.4f 3. 45, 67!
Ответы
Ответ 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
.