Подтвердить что ты не робот

Игнорировать чувствительность к регистру при сравнении строк в PHP

Я пытаюсь сравнить слова для равенства, а случай [верхний и нижний] не имеет значения. Однако PHP, похоже, не согласен! Любые идеи относительно того, как заставить PHP игнорировать случай слов при их сравнении?

$arr_query_words = array( "hat","Cat","sAt","maT" );
// for each element in $arr_query_words -
for( $j= 0; $j < count( $arr_query_words ); $j++ ){

    // Split the $query_string on "_" or "%" :
    $story_body = str_replace( $arr_query_words[ $j ],
         '<span style=" background-color:yellow; ">' . $arr_query_words[ $j ] . '</span>',
               $story_body );

// --- This ONLY replaces where the case [upper or lower] is identical ->
}

Есть ли способ выполнить замену, даже если дело отличается?

4b9b3361

Ответ 1

Используйте str_ireplace для выполнения замены строки без учета регистра (str_ireplace доступен с PHP 5):

$story_body = str_ireplace($arr_query_words[$j],
   '<span style=" background-color:yellow; ">'. $arr_query_words[$j]. '</span>',
    $story_body);

Для случайного сравнения строк используйте strcasecmp:

<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
    echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>

Ответ 2

Самый простой и наиболее широко поддерживаемый способ достижения этого - возможно, строчные буквы обеих строк перед их сравнением, например так:

if(strtolower($var1) == strtolower($var2)) {
    // Equals, case ignored
}

Возможно, вы захотите обрезать сравниваемые строки, просто используйте что-то подобное для достижения этой функциональности:

if(strtolower(trim($var1)) == strtolower(trim($var2))) {
    // Equals, case ignored and values trimmed
}

Ответ 4

$var1 = "THIS is A teST";
$var2 = "this is a tesT";
if (strtolower($var1) === strtolower($var2) ) {
    echo "var1 and var2 are same";
}

strtolower преобразует строку в нижний регистр

Ответ 5

if(!strcasecmp($str1, $str2)) ... //they are equals ignoring case

strcasecmp возвращает 0, только если строки равны, игнорируя регистр, поэтому! strcasecmp возвращает true, если они равны, игнорируя регистр, в противном случае - false

http://php.net/manual/en/function.strcasecmp.php

Ответ 6

Я всегда добавляю разницу ascii между верхним и нижним регистром в символы нижнего регистра.