如何检查空格和特殊字符

时间:2018-11-10 16:13:12

标签: php authentication

我正在尝试使用php对登录表单进行编码以进行检查。但是我无法检查用户名是否有空格和特殊字符。我尝试使用[\ W] +,但这没用。

       <?php

        $usernerr = "";
        $passwerr = "";
        $usern = "";
        $passw = "";
        $pattern = '/[\'\/~`\!@#\$%\^&\*\(\)_\-\+=\{\}\[\]\|;:"\<\>,\.\?\\\]/';
        if($_SERVER['REQUEST_METHOD'] == 'POST')
        {   
            if(empty($_POST['uname']))
            {
                $usernerr = "*Please add a username please!";
            }
        else
        { 
            $usern = clearInput($_POST['uname']);
            if(!preg_match('/s/', $usern) || !preg_match($pattern, $usern))
            {
                $usernerr = "*Username have only letters and numbers!";
            }
            $usernerr = "";
        }

        if(empty($_POST['psw']))
        {
            $passwerr = "*Please add a password please!";
        }
        else
        { 
            $passw = clearInput($_POST['psw']);
            $passwerr = "";
        }
    }   

    function clearInput($input)
    {
        $input = trim($input);
        $input = stripslashes($input);
        $input = htmlspecialchars($input);
        return $input;
    }
    ?>

1 个答案:

答案 0 :(得分:2)

考虑到您所写的错误消息,您正在使自己复杂化。

不是搜索不是字母数字的字符列表,而是仅搜索字母数字。尝试使用this模式,不要忽略条件。

$pattern = "/^[a-zA-Z0-9]+$/";
// Some code...
if(preg_match($pattern, $usern))
// ^-------------------------------Notice the changes
{
    //Username is valid
}

模式说明:

^从一开始

[a-zA-Z0-9]搜索字母数字

+ 1次或更多时间

$至结尾

/^[a-zA-Z0-9]+$/可以被产生相同效果的/^[[:alnum:]]+$//^[a-z\d]+$/i取代。