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

Вопрос: Например: 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

Вопрос:

Например:
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]+)?))$

  • Вы можете проверить регулярное выражение здесь.
  • Дополнительную информацию см. в MSDN страница.
Оцените статью
Добавить комментарий