【问题标题】:preg_match(): Compilation failed: invalid range in character class at offset 15 [duplicate]preg_match():编译失败:偏移量 15 处的字符类中的无效范围 [重复]
【发布时间】:2014-11-30 06:19:40
【问题描述】:

我在验证名称时遇到此错误....几个月前我在正则表达式中搜索了国际名称,终于在这里找到了一些工作:Accept international name characters in RegEx

但现在它向我显示了这个错误,请帮助

preg_match():编译失败:偏移量 15 处的字符类范围无效

if(preg_match("/^[a-zA-Z\s,.'-\pL]+$/u", $name)) {
    return true;
} else{
    $this->addError($field_name.' contains invalid characters');
    return false;
}

也试试这个 preg_match("/^[\s,.'-\pL]+$/", $name) 但仍然显示同样的错误

【问题讨论】:

    标签: regex expression preg-match


    【解决方案1】:

    连字符 (-) 需要转义,因为它位于字符类中。

    注意:在字符类中,连字符具有特殊含义。您可以将它作为类的第一个或最后一个字符。在某些正则表达式实现中,您也可以直接放在范围之后。如果您将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到您的字符类中。

    if(preg_match("/^[a-zA-Z\s,.'\-\pL]+$/u", $name)) { ...
                                 ^^
    

    你可以这样写正则表达式:

    if(preg_match("/^[\pL\s,.'-]+$/u", $name)) { ...
    

    【讨论】:

    • 非常感谢。我搜索了将近一个小时的解决方案,您立即解决了这个问题,谢谢!
    • 如你所说,如果我使用 preg_match("/^[\pL\s,.'-]+$/u") 可以吗?
    • 我不明白为什么不 =)
    • 再次感谢你救了我!! :)
    猜你喜欢
    • 2020-02-18
    • 1970-01-01
    • 2020-01-28
    • 2014-11-24
    • 2020-03-20
    • 2019-09-19
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多