我在验证名称时收到此错误....我几个月前搜索了正则表达式的国际名称,最后得到了一些工作: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)但仍然显示相同的错误
答案 0 :(得分:11)
连字符(-
)需要进行转义,因为它位于字符类中。
注意:在字符类中,连字符具有特殊含义。您可以将其作为班级的第一个或最后一个角色。在某些正则表达式实现中,您也可以直接放在一个范围之后。如果将连字符放在其他任何位置,则需要在其前面加上反斜杠,以便将其添加到角色类中。
if(preg_match("/^[a-zA-Z\s,.'\-\pL]+$/u", $name)) { ...
^^
您可以按如下方式编写正则表达式:
if(preg_match("/^[\pL\s,.'-]+$/u", $name)) { ...