2013-05-20 15 views
0

我有以下正則表達式在我的應用程序代碼中正常工作,其他代碼編輯器沒有報告過它的問題。它用於驗證密碼。Netbeans中的正則表達式錯誤不存在於其他編輯器中

/^(?=.*[A-Za-z])+(?=.*[\d])+(?=.*[^A-Za-z\d\s])+.*$/ 

所以,換句話說:

必須有一個字母 必須有一個數字 必須有一個非字母,非數字

現在看來,NetBeans已經有相當不錯的正則表達式解析器據報道這是一個錯誤的陳述。但因爲我是新來的正則表達式,我不能發現錯誤。這是否是由於在最後使用了積極的lookahead ?=以及一個或多個+

當我取出+時,錯誤消失,但正則表達式在我的應用程序中停止執行。

如果有人能告訴我我的表情有什麼問題,那就太好了。

該聲明用於我使用的jQuery驗證插件,如果有幫助的話。另外由於我使用插件的事實,我寧願不將它分成幾個更小(更簡單,更乾淨)的表達式。這將需要大量的工作。

回答

1

將量詞應用於零寬度斷言(例如向前看)是毫無意義的。這些斷言的重點在於它們允許你斷言某些條件是真實的,而不會消耗任何文本 - 也就是推進當前的匹配位置。有些正則表達式把它當作一種語法錯誤,而另一些正則表達式則會有效地忽略量詞。擺脫那些加號,使您的正則表達式正確:

/^(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z\d\s]).*$/ 

如果按預期的方式不起作用,您可能正在運行到the infamous IE lookahead bug。通常的解決方法是重新排序的東西,以便所述第一先行在端錨定,像這樣:

/^(?=.{8,15}$)(?=.*[A-Za-z])(?=.*\d)(?=.*[^A-Za-z\d\s]).*/ 

(?=.{8,15}$)僅僅是一個例子;我不知道你的真實需求是什麼。如果你想要施加最小和最大長度限制,這是做這件事的理想場所。

+0

這很有道理。我認爲量詞是問題。感謝您的解決方案 – foochow