Использование ng-pattern не работает с контроллера или JSON
У меня есть этот код, который будет принимать только 6 цифр:
<input
ng-pattern="{{widget.regex}}"
name="{{widget.id}}">
{{widget.regex}}
<span ng-if="(myForm[item.id].$touched === true && myForm[item.id].$valid === false)" class="help-block">
<div ng-message="pattern">Enter 6 digit ID</div>
</span>
и значение регулярного выражения устанавливается из файла JSON следующим образом:
{
"items": [
{
"id": "customerID",
"label": "Enter ID",
"required": "yes",
"regex": "/^[0-9]{6,6}$/i"
},
{
"id": "customerEmail",
"label": "Email",
"required": "yes"
}
]
},
и вот вывод:
Теперь проблема в том, что если я введу 6-значный номер в поле идентификатора, сообщение об ошибке не исчезнет. Любое число, которое я введу, не заставит его работать. Однако, если я жестко закодировал регулярное выражение ng-pattern
атрибут, как это:
<input
ng-pattern="/^[0-9]{6,6}$/i"
name="{{widget.id}}">
{{widget.regex}}
<span ng-if="(myForm[item.id].$touched === true && myForm[item.id].$valid === false)" class="help-block">
<div ng-message="pattern">Enter 6 digit ID</div>
</span>
Это будет работать! Сообщение об ошибке исчезнет. Я также проверил это с контроллера следующим образом:
vm.regex = new RegExp('/^[0-9]{6,6}$/i');
и это тоже не сработало. Кто-нибудь знает в чем проблема? Пожалуйста, помогите и спасибо заранее.
1 ответ
Конструктор RegExp может быть выражен двумя способами:
new RegExp('ab+c', 'i'); //string notation
new RegExp(/ab+c/i); //literal regex notation
Обратите внимание, что строковая запись не имеет символа /, а буквальная запись имеет.
ng-pattern автоматически преобразует ввод строки в буквенную запись, если включены символы /. Если он обнаруживает строку без символов /, он переносит ее в символы ^ и $. Например "abc"
будет преобразован в new RegExp('^abc$')
но "/abc/i"
будет оценивать new RegExp(/abc/i)
,
Рекомендации: