2014-02-26 41 views
5

试图让用户使用其他语言(如西班牙语或法语)中的特殊字符。我本来有这样的:正则表达式允许任何语言的文字(如“ñ”)

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

,然后将其改为

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

,但仍然无法正常工作。应该允许诸如“ñ”的字母。谢谢。

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

修改: 使用:“/ [^ \ p {Xwd}。 - ]/u”。谢谢(即使有中文字母,它也能工作)

+2

[Documentation](http://www.php.net/manual/en/regexp.reference.unicode.php)总是有用的。 – tenub

+0

允许一切,然后没有你需要做的 – 2014-02-26 20:33:48

+0

@Dagon意图似乎是让*字母*(和数字和一些特殊字符),而不是*所有* :) – user2864740

回答

2

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

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

但是,如果你希望所有其他字母和数字:

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

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

0

你也可以看一下指定unicode的范围,即[\w\u00C0-\u024F.-]+包含拉丁扩展字母,但是很难将字符限制在如此广泛的子集中;中文怎么样?,越南,等我有衮我在这一个 - 最好让任何