2017-10-02 4 views
0

단어가 단어 인 경우 단어를 삭제해야합니다. "ц", "щ", "ы", "Â". 내가 필요로하는이 기능을 만들지 만 느리게 작동합니다.단어에이 문자가 있으면 단어를 지울 수있는 방법

public function CheckToInsert($text) 
{ 

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); 

foreach ($xarfho as $xarf) 
{ 
    if (stripos($text,$xarf) !== false) 
    { 
     return true; 
    } 
} 



return false; 

} 

public function UnsetUncorrectWords($words) 
{ 
    foreach ($words as $key => $value) 
    { 
     if($this->CheckToInsert($value) == false) unset($words[$key]); 
     if(strlen($value) < 3) unset($words[$key]); 
    } 

    return $words; 
} 
+0

음역을 변환하려는 경우 전체 문자열을 utf-8로 변환 할 수 있습니다. – teeyo

+0

아니요, 텍스트에서이 문자가있는 단어를 모두 삭제하고 싶습니다. – John

+0

https://ideone.com/과 같은 것입니다. 1PNQ63? –

답변

2

preg_grep을 사용하면 정규식 일치 항목이 포함 된 배열 항목이나 PREG_GREP_INVERT 플래그가있는 항목을 가져올 수 있습니다.

그래서, 당신의 선택의 어떤 문자가없는 모든 항목을 얻기 위해,의 "ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ" 편지와 아이템을 얻을 수 PHP demo

를 참조

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); 
$wrds = array('Еыфвҷ','цӣвееп','аааа'); 
$pat = '/[' . implode("", $xarfho) . ']/u'; 
$res = preg_grep($pat, $wrds, PREG_GREP_INVERT); 
// => Array ( [2] => аааа) 

사용 사용

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); 
$wrds = array('Еыфвҷ','цӣвееп','аааа'); 
$pat = '/[' . implode("", $xarfho) . ']/u'; 
$res = preg_grep($pat, $wrds); 
// => Array ([0] => Еыфвҷ [1] => цӣвееп) 

another PHP demo을 참조하십시오. [...]이 패턴은 ASCII 및 유니 코드 수정 이외의 문자를 포함하고 있기 때문에 요구되는 패턴과 /u 수정에 정의 된 모든 문자 (또는 문자의 범위)와 일치하는 문자 클래스입니다

으로 정규 표현식은 /[цщы]/u 모양을 정규식 엔진 패턴 및 입력 문자열을 올바르게 구문 분석 할 수 있습니다.

2

나는 그런 식으로 함수를 다시 작성 (또는 모든 기능을 사용하지 않는) 제안 : 패턴과 일치하지 않는

public function UnsetUncorrectWords($words) 
{ 
    return preg_grep('~\A[^қӣғҷҳӯҚӢҒҶҲӮ]{3,}\z~u', $words); 
} 

preg_grep 필터 배열 항목을.

패턴은 қ, ӣ, ғ, ҷ, ҳ, ӯ, Қ, Ӣ, Ғ, Ҷ, Ҳ, without없이 3 자 이상으로 작성된 단어를 나타냅니다.

strlen은 멀티 바이트 문자와 함께 사용할 수 없으므로이 문자는 문자 수가 아닌 바이트 수를 반환하므로주의하십시오.

+0

어떻게이 기능을 사용할 수 있습니까? 테스트 코드를 사용하여 sumple을 작성할 수 있습니까? – John