2013-08-23 70 views
6

我使用ng-pattern來驗證我的客戶端,如果遇到一些情況,比如看密碼的複雜性。AngularJS ng-pattern奇怪的行爲(正則表達式)

現在,我使用ng-pattern在我的正則表達式中遇到了非常奇怪的匹配。看下面的例子

<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-pattern匹配很奇怪?

更新:

我挖掘了我的應用程序的所有模塊和整個構建過程。當我在構建過程中禁用grunt-html2js時,ng-pattern指令再次開始工作。它似乎導致ng模式不正確地解釋正則表達式。由於問題是在html2js項目中創建的。並且,我將結束這個問題。

+1

這可能不會解決它,但你應該從模式的開始處移除'。*',因爲你實際上希望所有的lookahead從字符串的開始處開始(這也會顯着提高性能) 。 –

+0

感謝m.buettner,沒有解決實際問題,但我根據您的建議更改了我的正則表達式模式。除了我的客戶以外,其他任何地方都可以工作。 Ng模式仍然非常奇怪。 – JoakimB

+0

看起來很好http://plnkr.co/edit/1dYysdjfyYilAP7C5DZy?p=preview。 – sirhc

回答

5

我挖掘了我的應用程序的所有模塊和整個構建過程。當我在構建過程中禁用grunt-html2js時,ng-pattern指令再次開始工作。它似乎導致ng模式不正確地解釋正則表達式。由於問題是在html2js項目中創建的。並且,我將結束這個問題。

測試了grunt-html2js的0.1.3和0.1.6版本。

更新

在html2js項目產生的問題,導致了0.1.7版本,解決了錯誤。 謝謝karlgoldstein的快速反應和修復。

+0

如果你接受你自己的答案,它會看起來更加封閉! :) – laurelnaiad

+0

我會但不會讓我接受。需要再等一天。 – JoakimB

+1

+1,用於在您找出問題時更新問題 – laurelnaiad