Php 密码最大长度

Php 密码最大长度,php,regex,Php,Regex,我有一个用于注册过程的密码验证脚本,如果我没有设置最大长度限制,它可以正常工作。如果我添加32个字符的最大限制,它将忽略验证,创建帐户,即使我有超过32个字符 工作脚本: if (preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["password"]) === 0) { echo "The password must contain lower case charact

我有一个用于注册过程的密码验证脚本,如果我没有设置最大长度限制,它可以正常工作。如果我添加32个字符的最大限制,它将忽略验证,创建帐户,即使我有超过32个字符

工作脚本:

    if (preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["password"]) === 0)
    {
        echo "The password must contain lower case characters, upper case characters and numbers. It's length should be between 8 and 32 characters.";
    }
if (preg_match("/^.*(?=.{8,32})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["password"]) === 0)
        {
            echo "The password must contain lower case characters, upper case characters and numbers. It's length should be between 8 and 32 characters.";
        }
非工作脚本:

    if (preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["password"]) === 0)
    {
        echo "The password must contain lower case characters, upper case characters and numbers. It's length should be between 8 and 32 characters.";
    }
if (preg_match("/^.*(?=.{8,32})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["password"]) === 0)
        {
            echo "The password must contain lower case characters, upper case characters and numbers. It's length should be between 8 and 32 characters.";
        }

请在降级之前让我知道,以便我可以编辑我的问题。谢谢

要限制长度,只需编辑正则表达式即可。你已经走到一半了

if (preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["password"]) === 0 || strlen($_POST['password']) < 8 || strlen($_POST['password']) > 32 )
    {
        echo "The password must contain lower case characters, upper case characters and numbers. It's length should be between 8 and 32 characters.";
    }
/^?=.[0-9]?=.[a-z]?=.[a-z]。{8,32}$/


演示:

在一个大的正则表达式中执行它有点像是一场代码维护的噩梦。对于其他人查看您的代码来说,将其拆分要容易得多,它还允许您给出更具体的错误消息

此解决方案适合我,请尝试:

$password  = $_POST["password"];
$uppercase = preg_match('@[A-Z]@', $password);
$lowercase = preg_match('@[a-z]@', $password);
$number    = preg_match('@[0-9]@', $password);
$length    = preg_match("@^.{8,32}$@" , $password);

if(!$uppercase || !$lowercase || !$number ||  !$length  ) {
   echo "The password must contain lower case characters, upper case characters and numbers. It's length should be between 8 and 32 characters.";
}

如果您正在查找至少包含1个数字和1个字母的密码,请尝试以下操作:

^.*(?=.{8,32})(?=.*\d)(?=.*[a-zA-Z]).*$

必须问:你为什么要阻止用户使用更长的密码?你为什么要限制密码长度?!我还是不明白,为什么有些人限制密码的最大长度。它们通常是加密的,结果是长度相等的散列。不要惹恼你的用户…另请参阅:@SporeDev:即使你模仿了一些东西-试着想想解决方案。下面这些愚蠢的想法对你的教育没有好处。为什么不添加一些类似&&strlen$\u POST[password]的好主意呢。更易于阅读和添加/删除过滤器。非常感谢再次感谢!工作得很好。我对答案投了赞成票。然而,我接受了FaceOfJock的答案,因为我发现这是一个更好的解决方案。谢谢好吧,@SporeDev。但事实并非如此。也许可读性更好,但这很容易用正则表达式本身修复。看看这个: