我要檢查用戶是否已經成功地滿足了以下要求:強制密碼要求
- 的密碼至少爲8個字符
- 由一個資本&一個小寫字母的
我將如何做到這一點?
我使用下面的PHP腳本:
if (strlen($password) < 8) {
false
} else {
if (preg_match("/[^0,9]/", $password)) {
// how to check the upper case and lower case
}
}
我要檢查用戶是否已經成功地滿足了以下要求:強制密碼要求
我將如何做到這一點?
我使用下面的PHP腳本:
if (strlen($password) < 8) {
false
} else {
if (preg_match("/[^0,9]/", $password)) {
// how to check the upper case and lower case
}
}
使用preg_match("/[A-Z]/")
和preg_match("/[a-z]/")
preg_match('/[a-z]/', $password) && preg_match('/[A-A]/', $password)
if (
strlen($password) >= 8) &&
preg_match('/[A-Z]/', $password) > 0 &&
preg_match('/[a-z]/', $password) > 0)
{
/* Password validation passes, do stuff. */
}
else {
/* Password validation fails, show error. */
}
你不必*包含「> 0」,但由於preg_match返回一個整數而不是布爾值,所以我更願意明確地測試這種情況,以防他們稍後改變它。 – 2011-05-31 04:03:52
if(strlen($password) < 8) {
return false;
}
if(preg_match("/[^0,9]/", $password)) {
how to check the upper case and lower case
}
if($password == strtoupper($password) || $password == strtolower($password)){
//pass fails because its either all upcase, or lowercase
}
您可以使用trim,這實際上是比正則表達式
更快if (trim($password, 'a..z') != '' && trim($password, 'A..Z') != '' && strlen($password) >= 8)
{
/* Password validation passes, do stuff. */
}
else {
/* Password validation fails, show error. */
}
即使通行證全部較低且沒有數字,您的第一個個案也會通過。如果密碼中有數字,第二種情況將不會通過 – 2011-05-31 04:13:08
現在即使它沒有數字並且只有大寫和小寫字母,它也會驗證 – 2011-05-31 04:27:53
@Tudor Constantin:OP沒有提及任何有關數字的內容 – 2011-05-31 05:10:46
你可以做到這一點與正則表達式:
if (!preg_match('/^(?=[a-z])(?=[A-Z])[a-zA-Z]{8,}$/', $password))
{
//error
}
你可以使用一個密碼排位技術:
$x = "[email protected]#$";
$rank = Array();
$rank['length'] = strlen($x);
$matches = Array();
preg_match_all("/([a-z]+)/", $x, $matches);
$rank['lowercase'] = strlen(implode('', $matches[0]))/count($matches[0]);
$matches = Array();
preg_match_all("/([A-Z]+)/", $x, $matches);
$rank['uppercase'] = strlen(implode('', $matches[0]))/count($matches[0]);
$matches = Array();
preg_match_all("/([0-9]+)/", $x, $matches);
$rank['numbers'] = strlen(implode('', $matches[0]))/count($matches[0]);
$matches = Array();
preg_match_all("/([^a-zA-Z0-9]+)/", $x, $matches);
$rank['symbols'] = strlen(implode('', $matches[0]))/count($matches[0]);
echo "<pre>";
var_dump($rank);
echo "</pre>";
當不使用它時,由於'/ count()'函數返回一個除以0的錯誤。任何想法解決這個沒有一堆代碼? – Tarquin 2016-05-04 00:39:08
@Tarquin:爲什麼不簡單地使用if/else?不知道你的意思是「代碼亂碼」 – Quamis 2016-05-04 09:24:07
感謝您的回覆!我很努力地申請if或else,我應該怎樣檢查'$ matches'和'$ matches [0]'都只返回'Array' - 我也嘗試過使用其他一些函數,但是沒有得到結果。 ---我最終調用函數爲'@function_name()'來抑制錯誤,並使用if/else將空變量設置爲0作爲補丁解決方案。 – Tarquin 2016-05-04 23:00:23
歡迎的StackOverflow!第一個優秀問題。 – Sampson 2011-05-31 03:58:42
密碼需要有數字嗎? – 2011-05-31 04:28:38