2016-09-11 10 views
2

У меня есть этот код, который будет принимать только 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" 
    } 
    ] 
}, 

и вот результат:

enter image description here

Теперь 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> 

enter image description here

Она будет работать! Сообщение об ошибке исчезнет. Я также проверил его от контроллера следующим образом:

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).

Ссылки:

+0

Изменение ' "регулярное выражение": "/^[0-9] {6,6} $/я"' 'в" регулярное выражение ":" [0-9] {6,6} "решена проблема. Большое спасибо :) – sg552

+0

, но почему жесткое кодирование регулярного выражения в 'ng-pattern' действительно работает? Разве это не перепутает мое регулярное выражение с '/^[0-9] {6,6} $/i' до' ^/^ [0-9] {6,6} $/i $ '? – sg552

+1

Из документов ng-pattern: если выражение оценивает объект RegExp, то это используется напрямую. Таким образом, угловой достаточно умен, чтобы знать, что 'ng-pattern ="/^ [0-9] {6,6} $/i "' преобразуется непосредственно в новый RegExp (/^[0-9] {6,6} $/я) '. Ответ был отредактирован, чтобы отразить это. – Oberon

 Смежные вопросы

  • Нет связанных вопросов^_^