如何在PHP中的正则表达式中允许撇号

时间:2016-04-28 18:54:48

标签: php regex preg-match

我想检查字符串,它应该只包含拉丁字母,短划线和撇号。长度必须是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");

过滤我的字符串

1 个答案:

答案 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字母。