2013-02-21 5 views
5

Я этот код:проблемы с директивой ngPattern

<form name="test"> 
    <input type="text" ng-model="code" name="code" ng-pattern="/^code_[0-9]+$/"/> 
    <div ng-show="test.code.$dirty && test.code.$invalid"> 
     Error: 
     <span ng-show="test.code.$error.pattern">Pattern fail.</span> 
    </div> 
</form> 

У меня есть 2 проблемы с этим кодом:

  1. строк, как "code_232", "code_232" "code_232" проходит проверку , Я не эксперт с регулярным выражением, так что это может быть проблемой, просто связана с регулярным выражением я писал: /^code_[0-9]+$/

  2. Если я начинаю писать «code_23892» (правильная строка), я получаю ошибку сообщение в то время как я» м все еще запись (test.code.$error.pattern = true). Есть ли встроенный способ избежать этого? Так что мой desidered поведение не является:

Если я пишу «треск», а вход до сих пор фокус: никакая ошибки

Если я пишу «треск», а вход теряет фокус: ошибка.

Если я пишу «a», «ca», «coa» и т. Д .: ошибка, причина, по которой шаблон уже нарушен.

Возможно ли это, или я написал директиву проверки custome для достижения этой цели?

Заранее спасибо.

ответ

9

Причина, по которой пробел не вызывает неудачную проверку, заключается в том, что ng-model автоматически обрезает значение. Если вы этого не хотите, вы можете добавить ng-trim="false" в ваш <input />. Обратите внимание, что ng-trim - совершенно новый атрибут, поэтому вам, возможно, придется обновить свою угловую версию.

О втором вопросе; Я не думаю, что вы можете избежать проверки на запуск во время ввода текста, но вы можете изменить свой код, чтобы отображать только ошибку, когда вход теряет фокус. Я не думаю, что что-то вроде ng-blur и ng-focus существует, но это должно быть довольно просто реализовать.

+0

Я использую AngularJS 1.0.5 (выпущен сегодня) ... ng-trim = «false» не работает – Bruno

+0

Я думаю, что ng-trim является новым в версии 1.1, который, к сожалению, по-прежнему нестабилен. РЕДАКТИРОВАНО: Это в списке изменений 1.1.1 здесь: https://github.com/angular/angular.js/blob/master/CHANGELOG.md#1.1.1 –

+0

+1 Спасибо за вашу помощь! Я буду ждать больше ответов, прежде чем принимать ваш ответ. – Bruno