2016-06-30 213 views
-2

我已经在我的PHP代码如何使用的preg_match正确PHP

$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>"; 
} 

所以它适用于一切在包括AZ,az和0-9之间得到这个if语句,_, - 但我也希望它对于撇号 工作,例如,如果某人的名字是O'reily它不会接受它

+0

现在有什么问题? – Rizier123

+0

它不适用于撇号@ Rizier123 – Khaleesi

+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>"; 
} 

只是注意,将双精度与单引号工作。或者您可以简单地删除用空格替换引号的两行,并且您的原始正则表达式将起作用。