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

Spa*_*rsh 3 regex expression preg-match

我在验证名称时收到此错误....我几个月前搜索了正则表达式的国际名称,最后得到了一些工作:在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;
}
Run Code Online (Sandbox Code Playgroud)

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

hwn*_*wnd 12

连字符(-)需要进行转义,因为它在字符类中的位置.

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

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

您可以编写正则表达式,如下所示:

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