일부 스팸 방지를 위해 문자열에 중국어/키릴 문자가 포함되어 있는지 확인하는 방법을 찾고 있습니다.문자열의 영어가 아닌 문자 검색
문자 범위를 UTF-8 (http://en.wikipedia.org/wiki/UTF-8)으로 확인했지만 PHP로 작업하는 방법을 배울 수 없습니다.
내가 정말로하고 싶은 것은 키릴 문자 범위 또는 중국어 범위에있는 문자 수를 셉니다. 일부 정규식으로이 작업을 수행 할 수 있습니까?
일부 스팸 방지를 위해 문자열에 중국어/키릴 문자가 포함되어 있는지 확인하는 방법을 찾고 있습니다.문자열의 영어가 아닌 문자 검색
문자 범위를 UTF-8 (http://en.wikipedia.org/wiki/UTF-8)으로 확인했지만 PHP로 작업하는 방법을 배울 수 없습니다.
내가 정말로하고 싶은 것은 키릴 문자 범위 또는 중국어 범위에있는 문자 수를 셉니다. 일부 정규식으로이 작업을 수행 할 수 있습니까?
특정 유니 코드 범위에 포함될 각 문자의 바이트 값을 확인할 수 있습니다. 문자열 순수한 UTF-8이 사용하는 것입니다 경우 http://jrgraphix.net/research/unicode_blocks.php
정말로 감사합니다! 또한 특정 범위에 대한 정규 표현식을 생성하는이 발견 : http://kourge.net/projects/regexp-unicode-block –
멋진, 링크를 제공 주셔서 감사합니다. 이것은 매우 유용 할 수 있습니다;) – muehlbau
쉽게 확인할 수 있습니다 : 다음은 유니 코드의 목록의 범위이다
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;
}
솔직히 그것을 확인하지 않았지만.
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를 읽어보십시오.
다음을보십시오. http://www.regular-expressions.info/unicode.html 예제 입력을 제공하는 경우 무언가를 테스트하고 대답을 제공 할 수 있습니다. –