У меня есть этот код, который будет принимать только 6 значного:Использование нг-шаблон не работает от контроллера или JSON
<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"
}
]
},
и вот результат:
Теперь Prob lem is if if keyin 6 digit numeric в поле ID, сообщение об ошибке не исчезнет. Любое число, которое я вводил, не заставит его работать. Однако, если я жёстко регулярного выражения для 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');
и он тоже не работает. Кто-нибудь знает, в чем проблема? Пожалуйста, помогите и заблаговременно.
Изменение ' "регулярное выражение": "/^[0-9] {6,6} $/я"' 'в" регулярное выражение ":" [0-9] {6,6} "решена проблема. Большое спасибо :) – sg552
, но почему жесткое кодирование регулярного выражения в 'ng-pattern' действительно работает? Разве это не перепутает мое регулярное выражение с '/^[0-9] {6,6} $/i' до' ^/^ [0-9] {6,6} $/i $ '? – sg552
Из документов ng-pattern: если выражение оценивает объект RegExp, то это используется напрямую. Таким образом, угловой достаточно умен, чтобы знать, что 'ng-pattern ="/^ [0-9] {6,6} $/i "' преобразуется непосредственно в новый RegExp (/^[0-9] {6,6} $/я) '. Ответ был отредактирован, чтобы отразить это. – Oberon