在密码验证器中使用特殊字符

时间:2014-10-14 16:13:07

标签: php validation

我正在尝试制作密码验证器并遇到问题。似乎我的代码不会读取特殊字符。下面是我的代码:

    <?php
        $Passwords = array(
        'Pas$word1',
        'Pas$word2',
        'Pas$word3',
        'Pas$word4',
        'pas$word1',
        'PAS$WORD1',
        'Password1',
        'Pas$word',
        'Pas$word 1',
        'Pas$word1234567890',
        'P$wd1');

        function validatePassword($Password)
        {
            if (preg_match("[^!-/0-9A-Za-z]", $Password)==1)
            {
                return TRUE;
            }
            else
            {
                return FALSE;
            }
        }

        foreach ($Passwords as $Password)
        {
            if (validatePassword($Password) == false)
            {
                echo "<p>The password <em>$Password</em> does not appear to be valid.</p>";
            }
        }
        echo "<p>Processing has completed.</p>";
    ?>

修复了我的数组,因此它有单引号,现在显示所有内容。目前的问题是显示所有内容。我的validatePassword函数有什么问题?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

使用单引号或使用反斜杠转义您的文字美元符号。否则,$word1将被解释为名为word1的变量。

请参阅http://php.net/manual/en/language.types.string.php

答案 1 :(得分:1)

你的第二个问题是你的正则表达式上没有分隔符。变化:

if (preg_match("[^!-/0-9A-Za-z]", $Password)==1)

要:

if (preg_match("/[^!-/0-9A-Za-z]/", $Password)==1)

您的第三个​​问题是您已关闭/关闭错误报告。如果它一直存在,那么在运行代码时会发出许多警告,这些代码表明了问题的根源。

当您开发新代码时,请将其放在文件的顶部:

error_reporting(E_ALL);
ini_set('display_errors', 'On');