我正在尝试使用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;
}
?>
答案 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
取代。