2014-02-26 37 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.-]+包含拉丁擴展字母,但是很難將字符限制在如此廣泛的子集中;中文怎麼樣?,越南,等我有袞我在這一個 - 最好讓任何