ng-pattern допускает символ '+', когда регулярное выражение ограничивает до цифр

Я использую регулярное выражение /^[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 (не должно быть true)

https://plnkr.co/edit/3OVE6qiWgJozUb3hyFQ5?p=preview

2 ответа

Если вы хотите, чтобы шаблон работал, вам нужно установить type приписывать text, Поскольку вы также хотите, чтобы пользователи могли вводить только цифры в поле ввода, добавьте 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/

Другие вопросы по тегам