2013-04-10 22 views
6

Bir dizenin İngilizce olup olmadığını kontrol etmek için bu kodu kullanıyorum. "some english text で書くタッチイベント (フ" gibi dize bu da İngilizce dilinde, herhangi fikir olarak algılar çünküPHP İngilizce olmayan bir dizin olup olmadığını algıla.

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

Mükemmel bir sonuç sağlamak olamaz?

+0

"ingilizce" tanımlayın. Harfler için sadece önemsiz '/^[a-zA-Z] * $ /' sadece "ingilizce" ile eşleşir. – Jon

+0

'Gerçek İngilizce' mi demek istiyorsunuz, yoksa 'kanji/kana'dan daha fazla Latin karakteri içeriyor mu? – Rup

cevap

17

bu deneyin .. durumda kullanışlı alabilirsiniz rağmen (Lütfen mbstring php modülünün yüklü olması gerektiğini unutmayın):

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

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

çalışıyor ... http://ideone.com/obm95F –

+0

Üzgünüz, mb_strlen içinde utf-8 kodlaması eksikti. Şimdi çalışmalı. –

+0

Mükemmel ... İyi çalışma ... –

0

Dili, karakter türünden algılayamazsınız. Ve bunu yapmak için kusursuz bir yol yoktur.

Herhangi bir yöntemle, sadece eğitimli bir tahminde bulunursunuz. Gönderen: Detect language from string in PHP

aşağıda bazı makaleler

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

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

Umarım yardımcı olur

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

..

+1

Bu cevap, başka bir sorudan kopyalanmayan/yapıştırılmayan bir şey söylüyor mu? – Jon

+0

Neden yorumları reddediyorsunuz? Bu kesinlikle doğru ... – Chris

+0

@Chris Reddetmedim, ancak yorumlar cevap olarak gönderilmemelidir. Ayrıca, eğer Hiren bu soruyu başka bir yerde zaten yanıtlıyorsa, OP'yi kopya olarak işaretlemelidir. – Boaz

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