Использование 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),

Рекомендации:

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