preg_match( '/^[-A-Za-z0-9\p{Han}]+$/u', $name)
这只适用于中文字符,我需要它来检查所有语言。 有什么建议吗?
我试过下面的命令。它适用于某种语言,但不适用于所有语言。
preg_match('/^[-A-Za-z0-9\p{L} ]+$/u', $name)
修改
确切的要求是:如果字符串包含任何符号,请将其替换为_
;允许多语言内容。
答案 0 :(得分:0)
确切的要求是:如果字符串包含任何符号,请将其替换为
_
;同时允许多语言内容。
因此,您需要使用preg_replace
替换模式的所有非重叠事件和定义的替换字符串,并且匹配符号的模式为\p{S}
。不要忘记u
UNICODE修饰符。
preg_replace('~\p{S}~u', '_', $s);
现在,如果您还计划匹配并删除标点符号(POSIX字符类[:punct:]
包括标点符号和符号),-
除外,您可以使用
preg_replace('~(?!-)[[:punct:]]~u', '_', $s);
请参阅regex demo。
此处,(?!-)
否定前瞻将限制更符合标点符号和符号字符的通用[[:punct:]]
模式,强制正则表达式引擎排除-
匹配。
如有必要,您可以通过这种方式添加更多例外。