Например:
10
0.1
1.23234
123.123
0.000001
1.000
0,3
И неправильные примеры:
0001.2
-12
-1,01
+2,3
EDIT: стандартное JavaScript-выражение.
Например:
10
0.1
1.23234
123.123
0.000001
1.000
0,3
И неправильные примеры:
0001.2
-12
-1,01
+2,3
EDIT: стандартное JavaScript-выражение.
Попробуйте здесь
^(?:[1-9]\d*|0)?(?:\.\d+)?$
Смотрите здесь онлайн в Regexr
Если совпадение пустой строки не требуется, вы можете добавить проверку длины в свое регулярное выражение, например
^(?=.+)(?:[1-9]\d*|0)?(?:\.\d+)?$
Положительный lookahead (?=.+)
гарантирует, что существует хотя бы 1 символ
Это передаст все ваши тестовые примеры, включил многострочный режим:
/^(?!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
Я несколько раз наткнулся на эту страницу, вот мое решение для любого, кто спотыкается здесь после меня:
Регулярное выражение, подобное a = (\ d + \.?\d * |\d * \.?\d +), соответствует всем десятичным числам без знака, но включает такие вещи, как 002.0
Регулярное выражение для фильтрации этих вещей - это b = [1-9 \.]+. *
Итак, одно решение - сказать, что оно соответствует критериям, если совпадают а и b. Или эквивалентно (противопоказано), см., Нет ли совпадения для! A |! Б. К сожалению, большинство языков не имеют полного пакета регулярных выражений; функции "и" и "отрицать" обычных языков обычно отсутствуют. Два простых регулярных выражения, которые я нашел в коде, выглядят намного красивее и более удобны в обслуживании, чем один сложный (я говорю это в контексте этого вопроса и подобных ситуаций)
Рассмотрим регулярное выражение:
^[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]+)?))$