2013-04-10 59 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))