2014-10-01 57 views
0

特殊字符的正則表達式的特殊字符 - 允許強密碼驗證與PHP中

空間 - 不允許

數字字符 - 允許

信 - 允許

場8的最小長度

if (!preg_match("/([A-Za-z\S]*$){8,}/",$pass )) { 
error} 

但有一個呃ROR!

+0

* *錯誤是什麼?此外,爲什麼你在世界上禁止空間? – Undo 2014-10-01 17:13:12

+0

假設它不符合要求,因爲當我測試aaaaaa1 *時顯示錯誤 – user040311 2014-10-01 17:16:06

+0

你是什麼意思的特殊字符? – 2014-10-01 17:16:52

回答

1

我認爲你正在尋找:

if(!preg_match("/^\S{8,}$/i", $pass)) { 
    // error 
} 

您當前的表達,([A-Za-z\S]*$){8,},是過於複雜和缺少一些關鍵點位。

首先你的角色等級[A-Za-z\S]不符合你的要求。 \S[^\s][^ \t\r\n\f]相同,換句話說就是任何非空白字符。這是所有你需要的,因爲一切都是允許的。

然後你重複這個字符類0+次,然後是字符串的結尾。這一切都很好,但是你試着重複整個組合8次以上。你真正需要做的就是重複8次以上的字符類別,然後是字符串的結尾(並且你還希望在字符串的開頭^之前)。


這可以讓你:

^\S{8,}$ 

Demo

+1

特殊字符怎麼樣? – 2014-10-01 17:13:43

+0

完全讀取錯誤,*面掌*。 – Sam 2014-10-01 17:18:33

1

我認爲這將是足夠的,

if(!preg_match("/^[^\s]{8,}$/i", $pass)) { 
    // error 
} 
+0

第一次有我的+1正確閱讀問題。離開我的答案,因爲我花了很多時間詳細說明;) – Sam 2014-10-01 17:20:02

0

你的表達會匹配任何在零個或多個結束您列出的字符的實例;因此它會匹配一切。你也沒有將它固定在前面,所以在固定零之後,只要它以有效的子串結尾,你仍然可以匹配任何密碼。和\S將匹配所有內容這不是一個空間,這似乎不是你以後的樣子。

如果您只想使用字母,數字和下劃線,請使用/^\w{8,}$/。如果您還想要特定的其他字符,例如.,!+,請使用/^[\w.,!+]{8,}$/。等(只有反斜槓和-在字符範圍內有特殊含義)。