正则表达式不工作密码?不知道为什么

时间:2011-04-24 20:34:49

标签: php regex function passwords preg-match

所以我有一个正则表达式代码,以确保密码是4到13个字符,它一直失败

public function valid_password($password){
        if(preg_match('^.{3,14}^', $password)){
            return true;
        }//end if
        else{
            return false;
        }//end else     
    } 

我正在使用正则表达式而不是php的长度属性,因为我稍后会添加更多正则表达式代码。但是,现在我对这个失败的程序感到困惑。

问题是,它确保密码超过3个字符,但它不关心它有多长,好像我没有设置限制。

提前致谢

5 个答案:

答案 0 :(得分:2)

^是字符串开头的锚点。字符串的结尾使用$分隔:

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个字符?这样就可以防止人们选择真正安全的密码。你可能应该提高这个限制。

答案 1 :(得分:2)

您在这里使用了^作为分隔符php.net/mregexp.reference.delimiters.php

^.{3,14}^

这是可能的,但在你的情况下不是一个好主意,因为你的实际目的需要^。它通常与主题的开头匹配。要正确计算长度,你需要这样做。您还需要主题元字符的$结尾。

基本上是这样的:

preg_match('/^.{3,14}$/'

现在,如果您想将此正则表达式与其他匹配条件相结合,我建议使用这种花哨的断言语法:

preg_match('/(?=^.{3,14}$) (...)/x', $password)

这将允许您指定其他代替...的内容 - 并隐藏长度检查。

答案 2 :(得分:1)

preg_match('/^.{3,14}$/', $password)

但用于计算字符串长度的正则表达式? = Overkill

答案 3 :(得分:1)

^匹配字符串的开头,而不是结尾。 $匹配结尾。

你忘了你的分隔符了。

完整的固定行是:

if (preg_match('/^.{3,14}$/', $password)) {

但是,强烈建议您改为使用:

$len = strlen($password);
if ($len >= 3 && $len <= 14) {

相反,因为正则表达式对此完全过分。

答案 4 :(得分:1)

试试这个:

preg_match('/^.{3,14}$/', $password)