2011-04-25 144 views
2

在用戶名以外的任何字符 - 我想只允許字母數字字符,並且我想其他10個UTF8字符。什麼是適當的方式來做到這一點? UTF8會成爲preg函數的問題,我需要使用另一種方法嗎?檢查如果字符串包含允許的內容

謝謝

+1

當你嘗試它有用嗎? – 2011-04-25 01:41:51

回答

1

recently asked如何使這只是做正確的事,並瞭解到,這是相當多刺把一切完全正確。

如果你不能得到/\w/u在Unicode上適合你,它主要是/[\pL\pM\p{Nd}\p{Nl}\p{Pc}]/u

0

Preg是你最好的選擇。做一些這樣的事情,替換隨機的日文字符,我用你選擇允許的字符。

if (preg_match('/[\x{0030}-\x{0039}\x{0041}-\x{005A}\x{0061}\-u007A]+/u', $subject)) { 
return true; 
} 
return false; 

如果需要使用正則表達式的表達式,然後我建議使用RegexBuddy,你可以在regexbuddy.com

+0

但是,這不是Unicode的字母,你知道。 'a-z'是這些代碼異味錯誤之一。 – tchrist 2011-04-25 02:23:29

+0

對不起。以上是編輯使用Unicode字符映射。這是[0-9A-Za-z] +的Unicode等價物,您需要爲所需的字符添加正確的映射。 – AWinter 2011-04-25 06:56:25

0

得到適當的Unicode支持(包括適當的情況下,意識)幫助您需要使用'/u'修改IIRC 。但是,但是,但是:要知道,大多數其他 PHP函數將把PHP字符串作爲字節字符串(不是字符串),這意味着如果你在做喜歡的東西stripos()你會得到字節偏移量指標,而不是字符索引,並且它們不能可靠地用於畸形的UTF-8(因爲它們匹配字節序列而不是字符序列)。

另外請注意,UTF-8文字可能不是一個好主意,如果你需要在某個地方運行該腳本不使用UTF-8作爲系統區域設置(Windows)中。