2013-08-23 9 views
6

Używam ng-wzór do sprawdzania poprawności strony mojego klienta, jeśli kilka przypadków, takich jak patrząc na złożoność hasła.Dziwne zachowanie AngularJS ng wzoru (regex)

Teraz otrzymuję bardzo dziwne dopasowania w moim regex przy użyciu ng-pattern. Spójrz na przykłady poniżej:

<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/> 

Powyższe powinno wymagać 8 znaków, co najmniej 1 wielką literę i 1 cyfrę lub znak specjalny. Z jakiegoś powodu uzyskuję dopasowanie do słów takich jak FaiLoudD, co nie ma sensu.

Uruchomiłem to samo wyrażenie w moim systemie python i działa jak urok. Sprawdziłem również regex przy użyciu http://regexpal.com/ i działa również idealnie.

Dlaczego wzór ng jest tak dziwny?

Aktualizacja:

I wykopali przez wszystkich modułów i całego procesu budowlanego mojej aplikacji. Dyrektywa ng-pattern zaczęła działać ponownie, gdy wyłączam plik grunt-html2js w procesie budowania. Wydaje się, że spowodowało to, że ng-pattern interpretował wyrażenie regularne niepoprawnie. Ponieważ problem jest tworzony w projekcie html2js. I z tym zamknę to pytanie.

+1

To prawdopodobnie nie naprawi tego, ale powinieneś usunąć '. *' Od początku wzorca, ponieważ faktycznie chcesz, aby wszystkie uprzedzenia zaczynały się od początku ciągu (powinno to również znacznie poprawić wydajność) . –

+0

Dziękuję m.buettner, nie naprawiłem rzeczywistego problemu, ale zmieniłem wzór regex zgodnie z twoją rekomendacją. Działa doskonale wszędzie, z wyjątkiem mojego klienta. Wzór Ng nadal działa naprawdę dziwacznie. – JoakimB

+0

Wygląda dobrze na http://plnkr.co/edit/1dYysdjfyYilAP7C5DZy?p=preview. – sirhc

Odpowiedz

5

Przeszukałem wszystkie moduły i cały proces budowy mojej aplikacji. Dyrektywa ng-pattern zaczęła działać ponownie, gdy wyłączam plik grunt-html2js w procesie budowania. Wydaje się, że spowodowało to, że ng-pattern interpretował wyrażenie regularne niepoprawnie. Ponieważ problem jest tworzony w projekcie html2js. I z tym zamknę to pytanie.

Przetestowano obie wersje 0.1.3 i 0.1.6 grunt-html2js.

Aktualizacja

Kwestia stworzony w projekcie html2js spowodowało w wersji 0.1.7, które postanowiło błąd. Dziękuję karlgoldstein za szybką reakcję i naprawę.

+0

Wygląda o wiele bardziej zamknięty, jeśli zaakceptujesz własną odpowiedź! :) – laurelnaiad

+0

Będę, ale SO nie pozwól mi zaakceptować. Musisz poczekać kolejny dzień. – JoakimB

+1

+1 za aktualizację problemu, gdy się zorientowałeś – laurelnaiad