Игнорировать чувствительность к регистру при сравнении строк в PHP - PullRequest
45 голосов
/ 30 октября 2009

Я пытаюсь сравнить слова на равенство, и регистр [верхний и нижний] не имеет значения. Однако 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 ->
}

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

Ответы [ 6 ]

76 голосов
/ 30 октября 2009

Используйте 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';
}
?>
20 голосов
/ 06 марта 2013

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

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

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

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

Надеюсь, это поможет!

5 голосов
/ 30 октября 2009
4 голосов
/ 06 ноября 2013
$var1 = "THIS is A teST";
$var2 = "this is a tesT";
if (strtolower($var1) === strtolower($var2) ) {
    echo "var1 and var2 are same";
}

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

1 голос
/ 20 апреля 2017
if(!strcasecmp($str1, $str2)) ... //they are equals ignoring case

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

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

0 голосов
/ 16 сентября 2014

Я всегда просто добавляю разность ascii между прописными и строчными буквами к строчным буквам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...