PHP preg_match用于多语言

时间:2017-08-15 09:28:36

标签: php preg-match

preg_match( '/^[-A-Za-z0-9\p{Han}]+$/u', $name)

这只适用于中文字符,我需要它来检查所有语言。 有什么建议吗?

我试过下面的命令。它适用于某种语言,但不适用于所有语言。

preg_match('/^[-A-Za-z0-9\p{L} ]+$/u', $name)

修改

确切的要求是:如果字符串包含任何符号,请将其替换为_;允许多语言内容。

1 个答案:

答案 0 :(得分:0)

  

确切的要求是:如果字符串包含任何符号,请将其替换为_;同时允许多语言内容。

因此,您需要使用preg_replace替换模式的所有非重叠事件和定义的替换字符串,并且匹配符号的模式为\p{S}。不要忘记u UNICODE修饰符。

preg_replace('~\p{S}~u', '_', $s);

现在,如果您还计划匹配并删除标点符号(POSIX字符类[:punct:]包括标点符号和符号),-除外,您可以使用

preg_replace('~(?!-)[[:punct:]]~u', '_', $s);

请参阅regex demo

此处,(?!-)否定前瞻将限制更符合标点符号和符号字符的通用[[:punct:]]模式,强制正则表达式引擎排除-匹配。

如有必要,您可以通过这种方式添加更多例外。