2013-04-10 80 views
6

我正在使用這些代碼來檢查一個字符串是否英文。PHP檢測如果非英文

<?php 
$string="で書くタッチイベント (フ"; 
if(!preg_match('/[^\W_ ] /',$string)) 
{ 
echo "Please enter English words only:("; 
} 
else { 
echo "OK, English Detected!"; 
} 
?> 

它不能提供完美的結果,因爲像"some english text で書くタッチイベント (フ"字符串這也檢測爲英語,任何想法?

+0

定義 「英語」。對於字母而言,只有簡單的'/^[a-zA-Z] * $ /'只會匹配「english」。 – Jon 2013-04-10 08:59:59

+0

你的意思是'真正的英語'還是你的意思是'包含比漢字/假名更多的拉丁字符'? – Rup 2013-04-10 09:02:50

回答

17

試試這個(請注意你需要安裝mbstring php模塊):

<?php 
    $string="で書くタッチイベント (フ"; 

    if(strlen($string) != mb_strlen($string, 'utf-8')) 
    { 
     echo "Please enter English words only:("; 
    } 
    else { 
     echo "OK, English Detected!"; 
    } 
?> 
+1

似乎沒有正在工作...... http://ideone.com/obm95F – 2013-04-10 09:08:19

+0

對不起,它在mb_strlen中缺少utf-8編碼。現在應該工作。 – 2013-04-10 09:11:02

+0

完美...不錯的作品... – 2013-04-10 09:13:03

0

您無法從字符類型中檢測到語言。並沒有萬無一失的方法來做到這一點。

用任何方法,你只是在做一個有根據的猜測。來源:Detect language from string in PHP

雖然一些下面的文章可能會在方便的情況下..

http://papermashup.com/php-language-detection/

https://github.com/BruceJillis/PHP-Language-Detection

http://phpir.com/language-detection-with-n-grams/

希望它可以幫助..

+1

這個答案是否說沒有從其他問題複製/粘貼? – Jon 2013-04-10 09:01:26

+0

你們爲什麼低估了他的評論?這絕對是真的... – Chris 2013-04-10 09:01:42

+0

@Chris我沒有downvote,但不應該發表評論作爲答案。另外,如果Hiren認爲這個問題已經在別處得到解答,那麼他/她應該將OP標記爲重複。 – Boaz 2013-04-10 09:03:07

0
if(!preg_match('/[^\w ]/u',$string))