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

时间:2014-10-06 00:29:21

标签: regex expression preg-match

我在验证名称时收到此错误....我几个月前搜索了正则表达式的国际名称,最后得到了一些工作: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)但仍然显示相同的错误

1 个答案:

答案 0 :(得分:11)

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

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

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

您可以按如下方式编写正则表达式:

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