preg_match(单个)不起作用

时间:2016-08-24 19:57:28

标签: php regex preg-match

我不知道为什么这段代码不能与我合作,我搜索了很多但我无法找到解决方案 我只需要preg_match来接受字母,单个和空格。 这是我的代码:

if (!preg_match("/^[a-zA-Z\-\' ]*$/",$firstName)) {
  $errors[] = "Invalid Name!"; 
}

例如$firstName = "abc'def"如果这样做了! 提前谢谢。

注:

在代码中进行正则表达式检查之前有htmlspecialchars

1 个答案:

答案 0 :(得分:0)

罪魁祸首是htmlspecialchars转换

  

''(适用于 ENT_HTML401 )或'(适用于 ENT_XML1 ENT_XHTML ENT_HTML5 ),但仅在设置了 ENT_QUOTES 时。

解决方案:

  • htmlspecialchars转换之前移动正则表达式检查

  • 使用低效的/^(?:[a-zA-Z' -]|&(?:apos|#039);)*$/模式,其中包含单引号实体

  • 将实体解码回来(使用htmlspecialchars_decode($firstName,ENT_QUOTES)html_entity_decode($firstName, ENT_QUOTES)),然后在“普通”值上使用/^(?:[a-zA-Z' -]*$/正则表达式。