Я использую regex/^ [0-9] + $/, чтобы ограничить ввод текстового поля, чтобы принимать только числа. Он работает нормально, но когда типы что-то вроде +124, то также он не устанавливает текстовое поле как недействительное.
<form name="myForm" novalidate>
<input type="number" ng-model="age" name="age" ng-pattern="/^[0-9]+$/" />
<h3>Valid Status : {{myForm.age.$valid}}</h3>
</form>
Вход: 123 Выход: myForm.age. $ Valid - true
Вход: -123 Выход: myForm.age. $ Valid - false
Вход: +123 Выход: myForm.age. $ Valid - true (не должно быть правдой)
Если вы хотите заставить шаблон работать, вам нужно установить атрибут type
в text
. Поскольку вы также хотите, чтобы пользователи onkeypress
только цифры в поле ввода, добавьте проверку onkeypress
:
<input type="text" onkeypress="return (event.charCode == 8 || event.charCode == 0) ? null : event.charCode >= 48 && event.charCode <= 57" ng-model="age" name="age" ng-pattern="/^[0-9]+$/" />
На самом деле вам даже не понадобится регулярное выражение ng-pattern.
Вы можете просто использовать:
ng-pattern="/^[0-9]+$/"
Не устанавливая тип ввода на номер (по умолчанию это текст, и он должен работать нормально).
Здесь JSFiddle: https://jsfiddle.net/3ju3b2tu/1/
type="text"