我的php代码中有这个if语句
$u = trim($u);
$u = $con->real_escape_string($u);
$u = preg_replace('/\s+/', '', $u);
$u = str_replace("'", " ", $u );
$u = str_replace('"', ' ', $u );
$u=htmlspecialchars($u);
if(preg_match("/[^a-z_\-0-9\']/i", $u))
{
echo "<b class='Usernametaken'>Please do not use any symbols</b>";
}
因此它适用于a-z,A-Z和0-9之间的所有内容,_, - 但我也希望它适用于撇号 例如,如果有人的名字是O'reily,它将不接受它
答案 0 :(得分:0)
这里的问题是你用空格替换引号:
...
$u = str_replace("'", " ", $u );
$u = str_replace('"', ' ', $u );
...
因此字符串O'reily
将转换为O reily
。然后它将不匹配,因为你的正则表达式与空格不匹配。仅使用"\'"
替换" "
:
if(preg_match("/[^a-z_\-0-9 ]/i", $u))
{
echo "<b class='Usernametaken'>Please do not use any symbols</b>";
}
请注意,这适用于双引号和单引号。或者您可以简单地删除用空格替换引号的两行,并且原始正则表达式将起作用。