我瘋狂地用正則表達式綠色。這是我想要實現的:我想要求一個8位字符的密碼,它允許大寫和小寫字母,數字和!@#$%^ & * -_個字符。以下是我已經不似乎工作:正則表達式和preg_match()
preg_match('([[email protected]#$%^&*]{8,})', $password)
我缺少的東西真的很明顯?
更新:是的,我錯過了一些非常明顯的東西 - 左括號[。但是,當我使用像單引號或括號這樣的字符時,它仍然會返回true。 (這是我試圖避免的。)
我瘋狂地用正則表達式綠色。這是我想要實現的:我想要求一個8位字符的密碼,它允許大寫和小寫字母,數字和!@#$%^ & * -_個字符。以下是我已經不似乎工作:正則表達式和preg_match()
preg_match('([[email protected]#$%^&*]{8,})', $password)
我缺少的東西真的很明顯?
更新:是的,我錯過了一些非常明顯的東西 - 左括號[。但是,當我使用像單引號或括號這樣的字符時,它仍然會返回true。 (這是我試圖避免的。)
基本上你錯過這裏的開口[
字符組支架:
↓
preg_match('([[email protected]#$%^&*()]{8,})', $password)
而且你也應該使用delimiters。在括號將表現爲這樣的,但最好使用不同的配對,以避免與捕獲組歧義:
preg_match('/^([[email protected]#$%^&*()]{8,})$/', $password)
這也增加了啓動^
,結束$
斷言整個字符串相匹配。
另外,'A-z'應該是'A-Z',而連字符('-')應該被轉義:'\ -'。 – FtDRbwLXw6 2012-01-10 02:16:37
錯過了案例不匹配。非偶然的連字符會偶然發生*,因爲它遵循有效的範圍,它不能是範圍本身的一部分。 (雖然可能是PCRE的一個特點。) – mario 2012-01-10 02:18:52
非常感謝。它的工作,但我仍然有點不確定爲什麼。開始和結束的斷言是做什麼的? (請原諒我的無知) – drewwyatt 2012-01-10 02:21:46
這可能更容易分解成單獨的規則。即一個規則來檢查密碼是否至少8個字符長,另一個檢查大寫,另一個檢查大寫,另一個小寫等。
此外,它看起來像正則表達式中有一些特殊字符沒有任何轉義。例如,除了一些特殊情況,*字符在正則表達式中具有特殊含義。它可能需要轉義\*
或括號內[*]
這是您的實際正則表達式嗎?你錯過了第一個括號,你的第一個範圍應該是A-Z – 2012-01-10 02:10:23
你限制字符集而不是允許所有字符的任何特定原因? – FtDRbwLXw6 2012-01-10 02:11:13
當看到密碼字符集的任何限制時,我總是感到驚訝。爲什麼我不在密碼中使用','(逗號)?! – zerkms 2012-01-10 02:13:34