我使用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項目中創建的。並且,我將結束這個問題。
這可能不會解決它,但你應該從模式的開始處移除'。*',因爲你實際上希望所有的lookahead從字符串的開始處開始(這也會顯着提高性能) 。 –
感謝m.buettner,沒有解決實際問題,但我根據您的建議更改了我的正則表達式模式。除了我的客戶以外,其他任何地方都可以工作。 Ng模式仍然非常奇怪。 – JoakimB
看起來很好http://plnkr.co/edit/1dYysdjfyYilAP7C5DZy?p=preview。 – sirhc