2010-01-25 63 views
17

我想讓用戶不僅可以填寫字母和數字,還可以選擇「特殊」字母,如「á」,「é」等。但是,我不希望他們能夠使用像符號「@」,「%」等如何將重音字符與PHP preg匹配?

有沒有寫一個正則表達式來實現這一點的方式(最好是沒有指定各專函。)

現在我有「!」?

$reg = '/^[\w\-]*$/'; 

回答

29

你可以使用Unicode character properties來描述字符:

/^[\p{L}-]*$/u 

\p{L}描述了Unicode字母字符的類。

+0

似乎要做的伎倆。感謝您的快速回復!! – Maurice 2010-01-25 17:12:45

1

什麼字符被視爲「單詞字符」取決於語言環境,您應該設置一個語言環境,其中包含那些字符的自然語言升字母,並使用/u修改爲正則表達式,像這樣:

$str = 'perché'; 
setlocale(LC_ALL, '[email protected]'); 
echo preg_match('#^\w+$#u', $str); 
+0

似乎也沒有工作。但是Gumbo的解決方案奏效了。感謝您的回覆 – Maurice 2010-01-25 17:16:22

3

你可以用這個表達式嘗試:

$reg = '~[^\\pL\d]+~u'; 

其捉也重音符號

+0

似乎無法在我的服務器上工作。但是Gumbo的答案奏效了。感謝您的回覆 – Maurice 2010-01-25 17:15:06