Вопрос:
Например:
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 символ
Ответ №1
Это передаст все ваши тестовые примеры, включил многострочный режим:
/^(?!0d)d*(.d+)?$/mg
Пояснение:
/^ # start of regex and match start of line (?!0d) # 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
Ответ №2
Я несколько раз наткнулся на эту страницу, вот мое решение для любого, кто спотыкается здесь после меня:
Регулярное выражение, подобное a = ( d + .?d * |d * .?d +), соответствует всем десятичным числам без знака, но включает такие вещи, как 002.0
Регулярное выражение для фильтрации этих вещей – это b = [1-9 .]+. *
Итак, одно решение – сказать, что оно соответствует критериям, если совпадают а и b. Или эквивалентно (противопоказано), см., Нет ли совпадения для! A |! Б. К сожалению, большинство языков не имеют полного пакета регулярных выражений; функции “и” и “отрицать” обычных языков обычно отсутствуют. Два простых регулярных выражения, которые я нашел в коде, выглядят намного красивее и более удобны в обслуживании, чем один сложный (я говорю это в контексте этого вопроса и подобных ситуаций)
Ответ №3
Рассмотрим регулярное выражение:
^[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]+)?))$