2013-03-13 721 views
1

我想寫一個正則表達式,它可以匹配可能包含中文字符的字符串。例子:正則表達式匹配一個可能包含中文字符的字符串

hahdj5454_fd.fgg" 
example.com/list.php?keyword=關鍵字 
example.com/list.php?keyword=php 

我使用這個表達式:

$matchStr = '/^[a-z 0-9~%.:_\-\/[^x7f-xff]+$/i'; 
$str  = "http://example.com/list.php?keyword=關鍵字"; 

if (! preg_match($matchStr, $str)){ 
    exit('WRONG'); 
}else{ 
    echo "RIGHT"; 
} 

它簡單的英語串那樣dasdsdsfdshttp://example.com/list.php相匹配,但它不匹配包含中國字符的字符串。我該如何解決這個問題?

+1

這是不是真的清楚你到底要配什麼... – HamZa 2013-03-13 10:27:05

+0

此外,還有在你的正則表達式語法問題。你似乎試圖嵌套字符類(這是不可能的),但是括號的數量無論如何都是不平衡的。 – 2013-03-13 10:47:06

回答

2

假設你想要擴展集,這從正則表達式匹配ASCII所有Unicode字母字母,那麼您可以使用

$matchStr = '#^[\pL 0-9~%.:_/-]+$#u'; 

我已經刪除了[^x7f-xff一部分沒有任何意義(在你的正則表達式中,它會匹配一個前面的括號,一個脫字號以及已經被該字符類的a-z0-9部分所涵蓋的一些ASCII字符)。

+0

非常感謝你!它的工作非常好...很酷 – mike 2013-03-13 11:00:05

+0

@TimPietzcker +1簡單和爆炸的目標... – 2013-03-13 11:25:28

+0

我有一個問題,'#'和'/'之間的區別是如何定期的?我試圖找到谷歌,但沒有找到的信息。你可以告訴我有關嗎?謝謝 – mike 2013-03-14 07:17:57

0

這工作:

$str = "http://mysite/list.php?keyword=關鍵字"; 

if (preg_match('/[\p{Han}]/simu', $str)) { 
    echo "Contains Chinese Characters"; 
}else{ 
    exit('WRONG'); // Doesn't contains Chinese Characters 
} 
相關問題