Regex разрешить пустую строку - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь применить регулярное выражение, в котором число может быть отформатировано с двумя десятичными разрядами, я смог достичь этого. Но я не могу удалить первый символ в строке, потому что мой тест не пройдёт, если совпадений нет. Как я могу изменить это регулярное выражение для поддержки удаления всего значения?

/^[0-9]+(\.([0-9]{1,2})?)?$/

https://codesandbox.io/s/k2qlq0w68r

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Если вы хотите регулярное выражение, которое также принимает пустую строку:

/^([0-9]+(\.([0-9]{1,2})?)?|)$/

Но я бы посоветовал вам не предполагать, что ввод действителен, пока пользователь вводит его вваш ввод, но вместо этого проверьте значение после того, как пользователь завершит редактирование (например, с помощью события свободной фокусировки).

0 голосов
/ 26 января 2019

Для конкретной вещи, которую вы делаете (проверка ввода), вы, вероятно, можете просто отказаться от своего регулярного выражения и просто использовать <input type="number"> с step:

<input type="number" step="0.01">

Вы можете проверить свойство validity , чтобы проверить, не является ли что-то неправильным.Я считаю, что что-то вроде document.getElementById("id").checkValidity() даст вам то, что вы хотите.

См. Также: Проверка форм с использованием JavaScript и Проверка формы, часть 2: API проверки ограничений (JavaScript) .


Если вы все еще хотите использовать регулярное выражение, вероятно, проще разделить только десятичные и неполноценные части:

/^(?:\d+(?:\.\d{0,2})?|\.\d{1,2})$/

Это соответствует следующемучисла: 100, 12.5, 10., 8.51, .67, .0

Но отклоняет следующее: .032, ., [пустая строка]

Я бы порекомендовал вам запустить проверку после , когда пользователь вводит число, а не так, как они его вводят. В противном случае он не сможет набрать .01, так какВаше регулярное выражение будет отклонять их при нажатии ..

0 голосов
/ 26 января 2019

Вы можете использовать это регулярное выражение, если хотите сделать десятичную точку перед точкой необязательной.

^([0-9])?(?(1)(.([0-9]{1,2})?)?|(.[0-9]{1,2}))$

Это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...