我是很新的正則表達式,我做了一個研究,並得到了一點理解 我需要的是一個符合這些規範用正則表達式安全密碼
- 任何字母字符的密碼(至少一個)
- 任何數字字符(至少一個)
- 沒有空格
- 特殊字符(0或更多)
我到是這個
^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)(?!\S)$
它匹配1,2,3種規格什麼而不是4 我嘗試了4種不同的東西,但我失敗了
誰能幫助我?
我是很新的正則表達式,我做了一個研究,並得到了一點理解 我需要的是一個符合這些規範用正則表達式安全密碼
我到是這個
^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)(?!\S)$
它匹配1,2,3種規格什麼而不是4 我嘗試了4種不同的東西,但我失敗了
誰能幫助我?
你非常接近。這似乎解決您的問題:
preg_match("/^(?=.*[0-9])(?=.*[a-z])(\S+)$/i", $password)
我做了兩個更改。
i
修飾符(匹配大小寫不敏感)稍作縮短即可。這允許移除A-Z`。(?!\S)
在這裏並沒有真正的幫助,我想。相反,您可以簡單地讓您的實際匹配只包含非空格字符(\S+
)。這也將立即允許您的密碼中的特殊字符(真正的任何空格rexcept)。如果您只想允許一組特殊字符,請將\S
替換爲包含字母,數字和您想允許的所有字符的字符類。順便說一句,如果你想確保你的密碼有一定的最小長度,你可以將+
改爲{8,}
。
似乎是這樣的:
^(?=.*[0-9])(?=.*[a-zA-Z])(?=\S*$)(?=[0-9a-zA-Z.,;[email protected]#$%^&*()\-+=\\\]+$)
添加你需要的所有特殊字符。
編輯:回答一些意見,這裏是一個試運行的結果:
<?php
$re = '/^(?=.*[0-9])(?=.*[A-Z])(?=\S*$)(?=[0-9a-zA-Z.,;[email protected]#$%^&*()\-+=\\\]+$)/';
$s = 'A2x.';
echo preg_match($re, $s);
?>
在Ubuntu下使用CLI測試:
[email protected]$ php _.php
1
而且它還有根據0
或1
值爲$s
;)
使用三個單獨的正則表達式 - one to che ck有一個字母字符,一個用來檢查是否有一個數字,另一個用來檢查是否有空格。儘管只用一個正則表達式就可以做到這一點,但每種附加條件都會顯着增加正則表達式的複雜度。
preg_match("/[a-z]/i", $passwd) && preg_match("/[0-9]/", $passwd) && !preg_match("/ /", $passwd)
不需要奇怪的正則表達式。特別是因爲要確保密碼包含或不含,並在它出現不要緊:
<?php
/**
* Validates the password:
* * Has at least one alphabet character
* * Has at least one digit
* * Has no spaces
*
* @param string $password Password to validate
*
* @return bool Whether $password is valid or not.
*/
function validate_password($password) {
//If no alphabet characters found, return false.
if (!preg_match("/[a-z]/i", $password)) {
return false;
}
//If no digits found, return false.
if (!preg_match("/[0-9]/", $password)) {
return false;
}
//If a space is found, return false.
if (strpos($password, " ") !== false) {
return false;
}
//Special characters are optional, so no checking.
//If nothing happened so far, the password is valid. Return true.
return true;
}
var_dump(
validate_password("test"), //False, no digits
validate_password("test123 test"), //False, space
validate_password("123456"), //False, no alphabet
validate_password("test1234") //True
);
+1您還可以創建一個「閾值」,以確保至少有4個已滿足或有所不同......即不會返回任何一個失敗,請記錄滿足條件的數量。然後回到計數高於必要的閾值。 – jheddings
完美的工作,謝謝你,我想+100 :)你但它需要15聲望,我只有8,再次感謝你:) –
還是更快......'/ ^(?= [^ 0-9 ] * [0-9])(?= [^ AZ] * [AZ])(\ S +)$/i' – ridgerunner