2016-07-28 15 views
0

Я использую regex/^ [0-9] + $ /, чтобы ограничить ввод текстового поля, чтобы принимать только числа. Он работает нормально, но когда типы что-то вроде +124, то также он не устанавливает текстовое поле как недействительное.ng-pattern допускает символ «+», когда ограничения регулярных выражений равны цифрам

<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 $ действительно - истинный

Вход:. -123 Вывод: myForm.age $ действительно - ложь

Вход:. +123 Выход: Myform. . возраст $ действительно - правда (не должно быть правдой)

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

+1

Используйте 'тип = "текст"' –

+0

@ WiktorStribiżew Почему она не может работать с типом = "число" ?? С type = "text" браузеры позволяют пользователям вводить произвольные символы. – vinnu313

+1

Ну, регулярные выражения работают с * string * input, двигатели регулярных выражений не допускают ввода каких-либо других * типов *. Таким образом, только «пароль», «текст» обычно являются допустимыми типами, которые будут работать с регулярным выражением. –

ответ

0

Если вы хотите, чтобы сделать работу шаблона, вам необходимо установить атрибут 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]+$/" /> 

На самом деле, вы даже не будете нуждаться в нг-шаблон регулярное выражение тогда.

-1

Вы можете просто использовать:

ng-pattern="/^[0-9]+$/" 

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

Здесь JSFiddle: https://jsfiddle.net/3ju3b2tu/1/