Для конкретной вещи, которую вы делаете (проверка ввода), вы, вероятно, можете просто отказаться от своего регулярного выражения и просто использовать <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
, так какВаше регулярное выражение будет отклонять их при нажатии .
.