Php 3/4密码要求

Php 3/4密码要求,php,database,passwords,Php,Database,Passwords,我试图让我的网站要求用户(当他们创建帐户时)包含3/4密码要求。我希望密码包含以下要求:1。数字2。小写字母3。大写字母4。特殊情况符号/字符。以下是我目前掌握的代码: $passwordspecs='^(?=.{8, 20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$ | ^(?=.{8, 20})(?=.*[a-z])(?=.*[A-Z])(?=.*[@$#£&]).*$ | ^(?=.{8, 20})(?=.*\d)(?=.*[a-z])(?=.*[

我试图让我的网站要求用户(当他们创建帐户时)包含3/4密码要求。我希望密码包含以下要求:1。数字2。小写字母3。大写字母4。特殊情况符号/字符。以下是我目前掌握的代码:

    $passwordspecs='^(?=.{8, 20})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$ | ^(?=.{8, 20})(?=.*[a-z])(?=.*[A-Z])(?=.*[@$#£&]).*$ | ^(?=.{8, 20})(?=.*\d)(?=.*[a-z])(?=.*[@$#£&]).*$ | ^(?=.{8, 20})(?=.*\d)(?=.*[A-Z])(?=.*[@$#^£&]).*$';
    if(preg_match('/$passwordspecs/', $_POST['password'])) {
        $results="INSERT INTO Operator (Username, Password, PermissionLevel)
        VALUES ('$_POST[username]', '$_POST[password]', '$_POST[plevel]')";
        echo "One user added!";
    }
    else {
        echo '<script type="text/javascript">';
        echo 'alert("Password needs to contain 3/4 requirements!")';
        echo '</script>';
    }
(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(8,20(20)元)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)()(a-z)(a-z)(a-z)(a-z)(a-z)()(a-z)(a-z)(a-z)(a-z)()(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)()(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(a-z)(()(^&).$; if(preg_match(“/$passwordspecs/”,$_POST['password'])){ $results=“插入操作员(用户名、密码、权限级别) 值(“$发布[用户名]”、“$发布[密码]”、“$发布[水平]”); echo“添加了一个用户!”; } 否则{ 回声'; echo“警报(“密码需要包含3/4要求!”); 回声'; } 我终于能够摆脱即将出现的错误消息,但现在无论我输入3/4或4/4密码要求,它都会直接转到else语句,我会收到警告消息。你有什么想法吗?或者有更简单的方法吗?

你的问题在这里:

preg_match('/$passwordspecs/', $_POST['password'])
您正试图在单引号中访问变量$passwordspecs的值。你需要用双引号代替。否则,它将被视为字符串。将其更改为:

preg_match("/{$passwordspecs}/", $_POST['password'])
但你还有更多的问题:

  • 不要将密码存储为字符串,使用建议的某种哈希算法
  • 不要直接将数据插入用户提供的数据库。(不要相信用户输入),换句话说,使用准备好的语句,否则会有人注入SQL代码
  • 在我看来,作为一个客户/用户,我讨厌当我不得不选择这样的密码时,以后很难记住。我在你的网站上注册(意味着你有+1个用户)为什么我不能选择密码,不管我想要的是什么?为什么我要遵守你的规则。也许我希望我的密码是一个空白


    此外,它还告诉用户必须以这种格式输入密码,从而向可能的“黑客”提供敏感信息,因为这样他们可以缩小所有可能的密码范围,以匹配您的格式,并使用暴力进行攻击(主题外)。请不要这样做。你只会激怒你的用户。使用单个正则表达式满足单个需求。将它们放入数组中,迭代并计数。
    “/$passwordspecs/”
    =>您需要双引号
    “/$passwordspecs/”
    ,否则变量将不会被解析和替换。注意:不要将密码存储为纯文本!小心你的代码容易受到sql注入的攻击谢谢你提供的安全信息,但幸运的是我现在不必担心这一点。我尝试将其更改为双引号,但仍然有相同的结果/问题我同意您的密码建议,但我只创建了被告知要执行的操作=/尝试以下操作:
    “/{$passwordspecs}/”