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

Regex для положительных чисел с плавающей запятой

Например:
10
0.1
1.23234
123.123
0.000001
1.000
0,3

И неправильные примеры:
0001.2
-12
-1,01
+2,3

EDIT: стандартное JavaScript-выражение.

4b9b3361

Ответ 1

Попробуйте здесь

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

Смотрите здесь онлайн в Regexr

Если совпадение пустой строки не требуется, вы можете добавить проверку длины в свое регулярное выражение, например

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

Положительный lookahead (?=.+) гарантирует, что существует хотя бы 1 символ

Ответ 2

Это передаст все ваши тестовые примеры, включил многострочный режим:

/^(?!0\d)\d*(\.\d+)?$/mg

Пояснение:

/^              # start of regex and match start of line
(?!0\d)         # not any number with leading zeros
\d*             # consume and match optional digits
(\.\d+)?        # followed by a decimal and some digits after, optional.
$               # match end of line
/mg             # end of regex, match multi-line, global match

RegExr: http://regexr.com?2tpd0

Ответ 3

Я несколько раз наткнулся на эту страницу, вот мое решение для любого, кто спотыкается здесь после меня:

Регулярное выражение, подобное a = (\ d + \.?\d * |\d * \.?\d +), соответствует всем десятичным числам без знака, но включает такие вещи, как 002.0

Регулярное выражение для фильтрации этих вещей - это b = [1-9 \.]+. *

Итак, одно решение - сказать, что оно соответствует критериям, если совпадают а и b. Или эквивалентно (противопоказано), см., Нет ли совпадения для! A |! Б. К сожалению, большинство языков не имеют полного пакета регулярных выражений; функции "и" и "отрицать" обычных языков обычно отсутствуют. Два простых регулярных выражения, которые я нашел в коде, выглядят намного красивее и более удобны в обслуживании, чем один сложный (я говорю это в контексте этого вопроса и подобных ситуаций)

Ответ 4

Рассмотрим регулярное выражение:

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

Это регулярное выражение будет соответствовать числу с плавающей запятой, например:

 - .343
 - 0.0
 - 1.2
 - 44
 - 44.
 - 445.55
 - 56.
 - . //Only dot(.) also matches
 - empty string also matches

Вышеуказанное регулярное выражение не будет принимать:

- h32.55 //Since ^ is used. So, the match must start at the beginning
   of the string or line.
- 23.64h //Since $ is used. So, the match must occur at the end of the string or before \n at the end of the line or string.

Рассмотрим регулярное выражение:

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

Это регулярное выражение будет соответствовать числу с плавающей запятой, например:

 - 45
 - 45.5
 - 0.0
 - 1.2
 - 445.55

Это регулярное выражение не принимает:

 - h32.55 //Since ^ is used. So, the match must start at the beginning
   of the string or line. 
 - 23.64h //Since $ is used. So, the match must occur at the end of the string or before \n at the end of the line or string.
 - 44. 
 - . //Only dot(.) does not matches here
 - empty string also does not matches here

Чистая плавающая точка:

^(([0-9]+(?:\.[0-9]+)?)|([0-9]*(?:\.[0-9]+)?))$ 
  • Вы можете проверить регулярное выражение здесь.
  • Дополнительную информацию см. в MSDN страница.