代码之家  ›  专栏  ›  技术社区  ›  Mahmoud Mabrouk

regex中的laravel allow(')撇号[重复]

  •  2
  • Mahmoud Mabrouk  · 技术社区  · 6 年前

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

    但不管怎么说,它都是假的

    更新:

    在运行此方法之前,我使用 $name = htmlentities($name, ENT_QUOTES, "UTF-8");

    0 回复  |  直到 6 年前
        1
  •  1
  •   Wiktor Stribiżew    8 年前

    你不应该用 htmlentities 在检查字符串之前,可以使用它 之后 是的。

    如果你申请 $name = htmlentities($name, ENT_QUOTES, "UTF-8"); some'name ,它将变成 some'name 是的。

    另外,要缩短图案,请使用

    preg_match("/^[A-Z'-]{2,50}$/i", $name)
    

    这个 /i 不区分大小写修饰符将使整个模式不区分大小写,并且 [A-Z] 将匹配所有大写和小写的ascii字母。