В настоящее время я использую регулярное выражение для обнаружения допустимых чисел с плавающей запятой, которое выглядит следующим образом:
/^[0-9]{1,10}(\.\d{0,3})?$/
Как и ожидалось, я могу сопоставить следующие значения:
0
0.
0.1
0.12
0.123
Однако мне необходимо иметь возможность проверять и сопоставлять следующие входные данные, поскольку эти значения можно анализировать как числовой тип в JavaScript.
.1
.12
.123
Я рассмотрел необязательное сопоставление первого символа, но пока не смог найти реального решения. Я думаю, что тот факт, что это необязательно, усложняет реализацию.
Чтобы сопоставить допустимые числа с плавающей запятой, включая предоставленные вами (например, .1, .12, .123), вы можете использовать следующее регулярное выражение:
/^(?:\d{1,10}(\.\d{0,3})?|(\.\d{1,3}))$/
ОБЪЯСНЕНИЕ: ваше исходное регулярное выражение правильно соответствует числам от 1 до 10 цифр до десятичной точки и от 0 до 3 цифр после десятичной точки. Однако он упускает один ключевой случай: числа, начинающиеся с десятичной точки (например, .1, .12, .123).
Чтобы охватить этот недостающий случай, я внес два изменения:
1. Цифры перед десятичной запятой сделаны необязательными: я обернул часть, соответствующую цифрам перед десятичной запятой, в группу без захвата (?: ... )?
и сделал ее необязательной с помощью ?
. Это позволяет регулярному выражению сопоставлять числа, в которых нет цифр перед десятичной запятой, например .1, .12 и .123.
2. Добавлен альтернативный вариант для сопоставления чисел, начинающихся с десятичной точки: я добавил альтернативный шаблон (\.\d{1,3})
после оператора |
(ИЛИ), чтобы явно сопоставлять случаи, когда число начинается с десятичной точки и имеет после него от 1 до 3 цифр. Это гарантирует, что такие числа, как .1, .12 и .123, будут действительными.
Вы также можете сделать необязательную группу не захватывающей и даже удалить группу после чередования, например, так: ^(?:\d{1,10}(?:\.\d{0,3 })?|\.\d{1,3})$
Хороший вопрос! Переключение на группу без захвата упрощает регулярное выражение, не влияя на совпадение. все правильно сопоставляется с обеими версиями, но незахватывающая группа уменьшает ненужные захваты
Чтобы сопоставить числа с плавающей запятой, в том числе с десятичной точкой в начале, вы можете использовать следующее регулярное выражение:
/^\d*\.?\d+$|^\.\d+$/
Он обрабатывает случаи с необязательными ведущими цифрами, необязательными десятичными точками и цифрами после десятичной точки.
В своем текущем состоянии это не соответствует желаемому 0. . Но вы можете изменить квантификаторы и изменить их на ^\d+\.?\d*$|^\.\d+$, чтобы он работал как положено (кроме того, что он не соблюдает предоставленные ограничения).
Можете ли вы показать, как вы пытались использовать необязательный символ? Потому что это должно сработать в вашем случае. Смотрите здесь