2013-04-10 9 views
6

Używam tych kodów, aby sprawdzić, czy ciąg jest w języku angielskim, czy nie.Wykrywanie PHP, jeśli nie jest angielski

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

To mogę zapewnić doskonałe rezultaty, ponieważ ciąg jak "some english text で書くタッチイベント (フ" wykrywa to również języka angielskiego, jakiś pomysł?

+0

Zdefiniuj "angielski". W przypadku liter tylko trywialny '/^[a-zA-Z] * $ /" pasuje tylko "angielski". – Jon

+0

Masz na myśli "prawdziwy angielski" lub masz na myśli "zawierający więcej znaków łacińskich niż kanji/kana"? – Rup

Odpowiedz

17

Wypróbuj (pamiętaj, że potrzebujesz zainstalowanego modułu php mbstring):

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

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

Wydaje się nie działa ... http://ideone.com/obm95F –

+0

Niestety, brakowało kodowania utf-8 w mb_strlen. Powinien teraz działać. –

+0

Idealne ... Dobra robota ... –

0

Nie można wykryć języka od typu znaku. I nie ma na to niezawodnych sposobów.

Przy użyciu dowolnej metody po prostu zgadujesz. Od: Detect language from string in PHP

Choć niektóre z poniższych artykułów może się przydać w przypadku ..

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

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

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

Nadzieja to pomaga ..

+1

Czy ta odpowiedź mówi cokolwiek, co nie zostało skopiowane/wklejone z tego innego pytania? – Jon

+0

Dlaczego zgodziliście się na jego komentarze? To absolutnie prawda ... – Chris

+0

@Chris Nie spadłem, ale komentarze nie powinny być publikowane jako odpowiedzi. Ponadto, jeśli Hiren uważa, że ​​to pytanie zostało już udzielone w innym miejscu, powinien oznaczyć PO jako duplikat. – Boaz

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