Странное поведение ng-паттерна AngularJS (регулярное выражение)

Я использую ng-pattern для проверки своей клиентской стороны в нескольких случаях, например, при проверке сложности пароля.

Теперь я получаю действительно странные совпадения в своем регулярном выражении, используя ng-шаблон. Посмотрите на примеры внизу

<span class="registration-error" ng-show="regForm.password.$error.pattern">- Fail to match..</span>
<input type="password" ng-model="registerForm.password" name="password" ng-pattern="/^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*[\d\W]).*$/"  required/>

Вышеупомянутое должно потребовать 8 символов, по крайней мере, 1 символ в верхнем регистре и 1 цифру или специальный символ. По какой-то причине я получаю совпадение для таких слов, как FaiLoudD, что не имеет смысла.

Я запускаю одно и то же регулярное выражение в своем бэкэнде Python, и оно работает как шарм. Я также проверил регулярное выражение, используя http://regexpal.com/, и оно также отлично работает.

Почему ng-шаблон так странно совпадает?

Обновлять:

Я просмотрел все модули и весь процесс сборки моего приложения. Директива ng-pattern снова начала работать, когда я отключил grunt-html2js в процессе сборки. Похоже, это привело к тому, что ng-pattern неправильно интерпретировал регулярное выражение. Поскольку выпуск создается в проекте html2js. И на этом я закрою этот вопрос.


person JoakimB    schedule 23.08.2013    source источник
comment
Это, вероятно, не исправит ситуацию, но вы должны удалить .* из начала шаблона, потому что на самом деле вы хотите, чтобы все предпросмотры начинались с начала строки (это также должно значительно повысить производительность).   -  person Martin Ender    schedule 23.08.2013
comment
Спасибо, m.buettner, реальная проблема не устранена, но я изменил шаблон регулярного выражения в соответствии с вашей рекомендацией. Работает идеально везде, кроме моего клиента. Ng-шаблон по-прежнему действует очень странно.   -  person JoakimB    schedule 23.08.2013
comment
Отлично выглядит на plnkr.co/edit/1dYysdjfyYilAP7C5DZy?p=preview.   -  person sirhc    schedule 23.08.2013
comment
Хм, это действительно странно. Да, это работает. Если я возьму ваш код и вставлю его в свой шаблон, я получу ту же ошибку. Что может помешать неправильному сопоставлению ng-pattern? Я попытался удалить все инъекции и очистить свой контроллер, чтобы убедиться, что там ничего не происходит, но это не имело значения. Та же ошибка.   -  person JoakimB    schedule 23.08.2013


Ответы (1)


Я просмотрел все модули и весь процесс сборки моего приложения. Директива ng-pattern снова начала работать, когда я отключил grunt-html2js в процессе сборки. Похоже, это привело к тому, что ng-pattern неправильно интерпретировал регулярное выражение. Поскольку выпуск создается в проекте html2js. И на этом я закрою этот вопрос.

Были протестированы обе версии grunt-html2js 0.1.3 и 0.1.6.

Обновлять

Проблема, созданная в проекте html2js, привела к версии 0.1.7, которая устранила ошибку. Спасибо karlgoldstein за быстрый ответ и исправление.

person JoakimB    schedule 23.08.2013
comment
Это будет выглядеть намного более закрытым, если вы примете свой собственный ответ! :) - person laurelnaiad; 24.08.2013