所以我有一个正则表达式代码来确保密码从4到13个字符,它总是失败
public function valid_password($password){
if(preg_match('^.{3,14}^', $password)){
return true;
}//end if
else{
return false;
}//end else
}
我使用正则表达式,而不是php的长度属性,因为我将在以后添加更多的正则表达式代码。然而,现在我被这个失败的程序困住了。
问题是,它确保密码超过3个字符,但它不在乎它有多长,好像我没有设置限制。
Thanks in advance
您在这里使用^
作为分隔符php.net/mregexp.reference.delimiters.php:
^.{3,14}^
这是可能的,但在您的情况下不是一个好主意,因为您需要^
用于其实际用途。它通常与主题的开头匹配。为了正确地计算长度,你需要这样做。您还需要主题元字符的$
结尾。
基本上:
preg_match('/^.{3,14}$/'
现在,如果您想将此正则表达式与其他匹配条件结合使用,我建议使用这种花哨的断言语法:
preg_match('/(?=^.{3,14}$) (...)/x', $password)
这将允许您指定其他东西来代替...
-并保持长度检查的隐式。
^
是字符串开头的锚。字符串的末尾用$
:
public function valid_password($password) {
return preg_match('~^.{3,14}$~', $password);
}
但是在这种情况下,我不会使用正则表达式,而是使用strlen
函数:
public function valid_password($password) {
$length = strlen($password);
return $length >= 3 && $length <= 14;
}
如果你喜欢随意修改来保存这一行:
public function valid_password($password) {
return isset($password[2]) && !isset($password[14]);
}
但说真的,为什么要将密码长度限制为14个字符呢?这样可以防止人们选择真正安全的密码。你可能应该提高这个限制
试试这个:
preg_match('/^.{3,14}$/', $password)
try
preg_match('/^.{3,14}$/', $password)
但regexp计数字符串长度??div =过度
^
匹配字符串的开头,而不是结尾。$
匹配结尾
你忘了你的分隔符。
完整的固定行是:
if (preg_match('/^.{3,14}$/', $password)) {
但是,我强烈建议您使用:
$len = strlen($password);
if ($len >= 3 && $len <= 14) {