2014-10-08 41 views
0

我得到錯誤「Nothing to repeat」/^ [az] + [AZ] + [0-9] + [^ A-Za-z0-9] + {8,} $/當我通過string.match()函數運行時,或者使用http://jsregex.com時(您可以簡單地複製代碼粘貼)。正則表達式試圖確保字符串長度至少爲8個字符,包括小寫字母a-z,大寫字母a-z,至少一個數字和一個非字母/數字(特殊字符)。沒有重複的Javascript正則表達式

以前的帖子提到特殊字符,但我沒有在這種模式中有任何,所以有點困惑,爲什麼它不工作。

+0

的問題是,在應用2量詞('+','{8,}')爲一個表達式。它必須只有一個量詞 – hindmost 2014-10-08 13:34:12

+0

即使通過使其成爲'/^[az] + [AZ] + [0-9] + [^ A-Za-z0-9] {8,} $ /'來修正正則表達式,我懷疑這是不對的。 – anubhava 2014-10-08 13:35:22

回答

1
(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*([^\w]|_)).{8,} 

以上是您需要的正則表達式。你有兩個量詞,這是導致錯誤。

DEMO

+0

當我在jsregex.com上嘗試這樣做時,上面的代碼看起來甚至與「deFs.0」匹配,但不是8個字符?但我同意你的演示確實有效。 – Ukuser32 2014-10-08 13:42:29

+0

@ Ukuser32啊!現在它的工作 – 2014-10-08 13:44:41

+0

超級感謝 - 雖然名聲並不真正需要 - 有一些反正:) – Ukuser32 2014-10-08 13:46:50

0

爲什麼{8,}在這裏?

有你想要這個+{8,}

我認爲之間沒有任何東西:/^[a-z]+[A-Z]+[0-9]+[^A-Za-z0-9]{8,}$/

+0

我需要它至少有8個字符長。 – Ukuser32 2014-10-08 13:33:59

3

{8,}前失去了+。它們是多餘的。

{8,}正試圖重複之前發生的事情。由於它是+,它沒有什麼可重複的。因此錯誤。如果您嘗試使用a++a{1}{2},或者彼此直接相鄰的任意中繼器(量詞)組合,則會得到相同的結果。

然而,作爲一個評論者正確地說,即使你得到你的正則表達式來編譯,它從根本上打破了你想完成的任務。

似乎更容易,可讀性和可維護性簡單地說

/[a-z]/.test(str) && 
/[A-Z]/.test(str) && 
/[0-9]/.test(str) && 
/[^a-zA-Z0-9]/.test(str) && 
str.length >=8 

的其他解決方案遵循我見過的模式,人們扭動自己變成結嘗試寫的更好解決的問題一個正則表達式掃描,測試或組合正則表達式。

+0

那麼如何設置這個字符串需要至少8個字符長,幷包含非字母數字字符?當我測試你的建議時,它似乎仍然不起作用。 – Ukuser32 2014-10-08 13:41:00

0

/^ [AZ] + [AZ] + [0-9] + [^ A-ZA-Z0-9] + {8,} $ /是錯誤的(+ {8,} )在

變化

/^ [AZ] + [AZ] + [0-9] + [^ A-ZA-Z0-9] {8,} $/