如何正确使用preg_match PHP

时间:2016-06-30 19:51:18

标签: php

我的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,它将不接受它

1 个答案:

答案 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>";
} 

请注意,这适用于双引号和单引号。或者您可以简单地删除用空格替换引号的两行,并且原始正则表达式将起作用。