如何檢查用戶輸入的密碼格式。字符串不重複並且用戶必須選擇數字,字符串(小寫/大寫)檢查密碼格式
聽說是我的代碼。 preg_match有什麼問題?
function checkPassFormat($ip)
{
if(preg_match('/^[a-A][0-9]/', $password))
return TRUE;
else
return FALSE;
}
如何檢查用戶輸入的密碼格式。字符串不重複並且用戶必須選擇數字,字符串(小寫/大寫)檢查密碼格式
聽說是我的代碼。 preg_match有什麼問題?
function checkPassFormat($ip)
{
if(preg_match('/^[a-A][0-9]/', $password))
return TRUE;
else
return FALSE;
}
我認爲[a-A]
意味着你只允許小型和資本A
。這應該是[a-zA-Z]
。您也可以嘗試[a-Z]
,但在C#中,例如,這不能按預期工作。
而且你可能要說「不止一個字母后跟不止一個號」:[a-zA-Z]+[0-9]+
。這將允許像abDCkl98
這樣的密碼。
如果你想混合字母和數字,你應該做一些像[a-zA-Z0-9]+
。這是用於像a9Bdc4re
這樣的密碼。
按照你的例子,這裏有另一個選擇:
"/[:alpha:][:digit:]/"
Try out this $pattern = "/^[a-zA-Z0-9]*$/i"; if(preg_match($pattern, $value)){ return true; }else{ return false; }
如果添加'i',則不需要'A-Z',因爲比較不區分大小寫。 –
我認爲這是問題的一個可愛的溶液(您也可以收集錯誤和向用戶顯示友好的信息):
const SECURELEVEL_LOW = 1;
const SECURELEVEL_MEDIUM = 2;
const SECURELEVEL_HIGH = 3;
const SECURELEVEL_SERVICE = 4;
const CONTAINS_LETTERS = 1;
const CONTAINS_DIGITS = 2;
const CONTAINS_CASESENSITIVELETTERS = 4;
const CONTAINS_SPECIALCHARS = 8;
public function _isValid($value) {
$valid = true;
switch ($this->_options['secureLevel']) {
case self::SECURELEVEL_SERVICE:
$minLength = 20;
$hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS + self::CONTAINS_CASESENSITIVELETTERS + self::CONTAINS_SPECIALCHARS;
break;
case self::SECURELEVEL_HIGH:
$minLength = 8;
$hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS + self::CONTAINS_CASESENSITIVELETTERS;
break;
case self::SECURELEVEL_LOW:
$minLength = 4;
$hasToContain = 0;
break;
case self::SECURELEVEL_MEDIUM:
default:
$minLength = 5;
$hasToContain = self::CONTAINS_LETTERS + self::CONTAINS_DIGITS;
break;
}
if (strlen($value) < $minLength) {
$valid = false;
}
if (strpos($value, ' ') !== false) {
$valid = false;
}
if ($hasToContain & self::CONTAINS_LETTERS) {
// Password has to contain letters
if (!preg_match('/[a-z]/i', $value)) {
$valid = false;
}
}
if ($hasToContain & self::CONTAINS_DIGITS) {
// Password has to contain numbers
if (!preg_match('/[0-9]/', $value)) {
$valid = false;
}
}
if ($hasToContain & self::CONTAINS_CASESENSITIVELETTERS) {
// Password has to contain small and capital letters
if (!preg_match('/[a-z]/', $value) || !preg_match('/[A-Z]/', $value)) {
$valid = false;
}
}
if ($hasToContain & self::CONTAINS_SPECIALCHARS) {
// Password has to contain a special character
if (!preg_match('/[^0-9a-zA-Z]/', $value)) {
$valid = false;
}
}
return $valid;
}
不應該你告訴我們問題是什麼,我們告訴你解決方案? –
這是一個常被問到的問題,您是否檢查過其他問題? http://stackoverflow.com/questions/4796681/validate-password-with-preg-match-in-php例如 –