我正在嘗試驗證新用戶帳戶的密碼是否符合這些條件:長度在 8-30 個字符之間至少包含 1 個小寫字母 (az)至少包含 1 個大寫字母 (AZ)包含至少 1 個以下特殊字符:_-!#*@&我有這樣的功能:function validPassword($str) {
return preg_match("^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_-!#*@&])[A-Za-z\d_-!#*@&]{8,30}$", $str);
}但是我收到一個錯誤。它應該為此密碼返回“true”,例如:HelloWorld123!但相反,它返回 false。知道可能出什么問題了嗎?if (validPassword($password) == true) {
// good password
}
2 回答

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
您忘記轉義“-”和定界符...
function validPassword($str) {
return preg_match("/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\-!#*@&])[A-Za-z\d_\-!#*@&]{8,30}$/", $str);
}

慕后森
TA貢獻1802條經驗 獲得超5個贊
您的正則表達式有錯誤,這就是為什么首先沒有匹配項的原因。
將您的正則表達式更改為此:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[_\-!#*@&])[A-Za-z\d_\-!#*@&]{8,30}$
在這里查看您的正則表達式:https ://regex101.com/r/ogPPeb/1
- 2 回答
- 0 關注
- 149 瀏覽
添加回答
舉報
0/150
提交
取消