2012-10-29 4 views
0

일부 스팸 방지를 위해 문자열에 중국어/키릴 문자가 포함되어 있는지 확인하는 방법을 찾고 있습니다.문자열의 영어가 아닌 문자 검색

문자 범위를 UTF-8 (http://en.wikipedia.org/wiki/UTF-8)으로 확인했지만 PHP로 작업하는 방법을 배울 수 없습니다.

내가 정말로하고 싶은 것은 키릴 문자 범위 또는 중국어 범위에있는 문자 수를 셉니다. 일부 정규식으로이 작업을 수행 할 수 있습니까?

+0

다음을보십시오. http://www.regular-expressions.info/unicode.html 예제 입력을 제공하는 경우 무언가를 테스트하고 대답을 제공 할 수 있습니다. –

답변

2

특정 유니 코드 범위에 포함될 각 문자의 바이트 값을 확인할 수 있습니다. 문자열 순수한 UTF-8이 사용하는 것입니다 경우 http://jrgraphix.net/research/unicode_blocks.php

+1

정말로 감사합니다! 또한 특정 범위에 대한 정규 표현식을 생성하는이 발견 : http://kourge.net/projects/regexp-unicode-block –

+0

멋진, 링크를 제공 주셔서 감사합니다. 이것은 매우 유용 할 수 있습니다;) – muehlbau

0

쉽게 확인할 수 있습니다 : 다음은 유니 코드의 목록의 범위이다

mb_check_encoding($inputString, "UTF-8"); 

그냥 조심,에 5.2.0의 버그를 갖고있는 것 같아요 5.2.6

의사 페이지에서 원하는 내용을 특히 mb_check_encoding의 댓글에 표시 할 수 있습니다. 귀하의 경우에의 Gmail 닷컴의 대답에 javalc6을 적응 :

function check_utf8($str) { 
    $count = 0; // Amount of characters that are not UTF-8 
    $len = strlen($str); 
    for($i = 0; $i < $len; $i++){ 
     $c = ord($str[$i]); 
     if ($c > 128) { 
      $bytes = 0; 
      if ($c > 247) { 
       ++$count; 
       continue; 
      } else if ($c > 239) 
       $bytes = 4; 
      else if ($c > 223) 
       $bytes = 3; 
      else if ($c > 191) 
       $bytes = 2; 
      else { 
       ++$count; 
       continue; 
      } 
      if (($i + $bytes) > $len) { 
       ++$count; 
       continue; 
      } 
      while ($bytes > 1) { 
       $i++; 
       $b = ord($str[$i]); 
       if ($b < 128 || $b > 191) 
        ++$count; 
       $bytes--; 
      } 
     } 
    } 
    return count; 
} 

솔직히 그것을 확인하지 않았지만.

1

PHP에서 preg_match_all은 전체 패턴 일치 수를 반환합니다.

는 정규식에서 유니 코드를 사용에 대한 자세한 내용은

$n = preg_match_all('/[\p{InCyrillic}\p{InCyrillic_Supplementary}]/u', $text); 

$n = preg_match_all('/\p{Cyrillic}/u', $text); 

또는

this article를 읽어보십시오.

관련 문제