我想检查字符串,它应该只包含拉丁字母,短划线和撇号。长度必须是2-50。一切正常,但如果一个字符串包含撇号,则函数返回false。
private function validName($name)
{
if(!preg_match("/^[a-zA-Z\'\-]{2,50}$/", $name))
return false;
return true;
}
如何在我的正则表达式中包含撇号?我也试过这些
preg_match("/^[a-zA-Z'-]{2,50}$/", $name)
preg_match("/^[a-zA-Z\'-]{2,50}$/", $name)
preg_match("/^[a-zA-Z'\-]{2,50}$/", $name)
但无论如何它都会返回false
更新:
在运行此方法之前,我使用$name = htmlentities($name, ENT_QUOTES, "UTF-8");
答案 0 :(得分:1)
在检查字符串之前不应使用htmlentities
,您可以在之后使用。
如果您将$name = htmlentities($name, ENT_QUOTES, "UTF-8");
应用于some'name
,则会转为some'name
。
另外,要缩短模式,请使用
preg_match("/^[A-Z'-]{2,50}$/i", $name)
/i
不区分大小写的修饰符将使整个模式不区分大小写,[A-Z]
将匹配所有大写和小写ASCII字母。