我不知道为什么这段代码不能与我合作,我搜索了很多但我无法找到解决方案
我只需要preg_match
来接受字母,单个和空格。
这是我的代码:
if (!preg_match("/^[a-zA-Z\-\' ]*$/",$firstName)) {
$errors[] = "Invalid Name!";
}
例如$firstName = "abc'def"
如果这样做了!
提前谢谢。
注:
在代码中进行正则表达式检查之前有htmlspecialchars
。
答案 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' -]*$/
正则表达式。