2011-06-26 28 views
2

我想改編一個php應用程序來處理非拉丁腳本(特別是:日文,簡體中文和阿拉伯文)。應用程序的數據驗證例程經常使用正則表達式來檢查輸入,但我不知道如何在系統上不安裝額外的語言環境(我不能依賴)來使\ w字符類型適應其他語言。如何處理PHP中非拉丁腳本輸入的驗證?

之前的開發人員已經在應用程序中工作,隨着我們支持的語言數量增加(您經常在代碼中看到「\\\\\\\\\\\\\\\\\'...」),我們可以簡單地將所需字符添加到正則表達式中,對於我現在需要支持的所有字母,我真的做到了這一點。

有沒有人有如何解決這個問題的建議?

+3

什麼是 「驗證」 是什麼意思?你可以使用locale-aware ['ctype_alnum'](http://php.net/manual/en/function.ctype-alnum.php),但你要求的是「什麼是字母數字字符_在任何語言環境_「... –

+0

unicode在PHP中被破壞,我知道這一點。很高興看到一些人們知道工作的圖書館的鏈接。 –

+0

@Ярослав在PHP中,Unicode是如何「破碎」的?大多數基本的字符串函數並不明確支持它,就這些。那些工作正常。 – deceze

回答

2

參見php.net此評論:http://www.php.net/manual/en/regexp.reference.unicode.php#102756

例如:

//$string may only contain arabic letters 
preg_match('@^\p{Arabic}[email protected]',$string); 

//$string may only contain cyrillic letters 
preg_match('@^\p{Cyrillic}[email protected]',$string); 

//$string may contain word-characters and greek 
preg_match('@^[\p{Greek}\w][email protected]',$str); 

...等等

示範:http://cecb.freephptest.com/

+0

一切都很好,但有什麼符合「任何語言或腳本中的任何字母字符」? –

+0

啊,根據[本網站](http://www.regular-expressions.info/unicode.html),有些語言支持'\ p {Letter}'來匹配「任何類型的字母」。 PHP是否? –

+0

你試過了嗎? –