正则表达式,允许使用任何语言的字母(如“ñ”)

时间:2014-02-26 20:26:47

标签: php regex unicode internationalization

试图让用户使用其他语言的特殊字符,如西班牙语或法语。我最初有这个:

 "/[^A-Za-z0-9\.\_\- ]/i" 

然后将其更改为

 "/[^\p{L}\p{N}\.\_\-\(\) ]/i" 

但仍然无效。应允许使用诸如“ñ”之类的字母。感谢。

修订: 我发现在开头添加(* UTF8)有助于解决问题。所以我使用以下代码:“/(* UTF8)[^ \ p {L} A-Za-z0-9 ._-] / i”

修订: 看完答案之后我决定使用:“/ [^ \ p {Xwd}。 - ] / u”。谢谢(它甚至可以用中文字母表。

2 个答案:

答案 0 :(得分:3)

对于拉丁语言,您可以使用\p{Latin}字符类:

/[^\p{Latin}0-9._ -]/u

但如果你想要所有其他字母和数字:

/[^\p{Xwd}. -]/u

“u”修饰符表示必须将该字符串读取为unicode字符串。

答案 1 :(得分:0)

您还可以考虑指定unicode范围,即。 [\w\u00C0-\u024F.-]+包括拉丁语扩展字母。但是很难尝试将字符限制在如此广泛的子集中;中国人,越南人等等呢?我和Dagon在这一个 - 最好允许任何事情。