PHP Velho Oeste 2024


(PHP 4, PHP 5, PHP 7, PHP 8)

strcasecmpБинарно-безопасное сравнение строк без учёта регистра


strcasecmp(string $string1, string $string2): int

Бинарно-безопасное сравнение строк без учёта регистра. Сравнение не зависит от локали; только буквы ASCII сравниваются без учёта регистра.

Список параметров


Первая строка


Вторая строка

Возвращаемые значения

Возвращает -1, если string1 меньше string2, 1, если string1 больше string2, и 0, если строки равны.

Список изменений

Версия Описание
8.2.0 Функция теперь возвращает -1 или 1; ранее она возвращала отрицательное или положительное число.


Пример #1 Пример использования strcasecmp()

= "Hello";
$var2 = "hello";
if (
strcasecmp($var1, $var2) == 0) {
'$var1 равно $var2 при сравнении без учёта регистра';

Смотрите также

  • strcmp() - Бинарно-безопасное сравнение строк
  • preg_match() - Выполняет проверку на соответствие регулярному выражению
  • substr_compare() - Бинарно-безопасное сравнение 2 строк со смещением, с учётом или без учёта регистра
  • strncasecmp() - Бинарно-безопасное сравнение первых n символов строк без учёта регистра
  • stristr() - Регистронезависимый вариант функции strstr
  • substr() - Возвращает подстроку

add a note

User Contributed Notes 4 notes

chris at cmbuckley dot co dot uk
12 years ago
A simple multibyte-safe case-insensitive string comparison:


function mb_strcasecmp($str1, $str2, $encoding = null) {
if (
null === $encoding) { $encoding = mb_internal_encoding(); }
strcmp(mb_strtoupper($str1, $encoding), mb_strtoupper($str2, $encoding));


Caveat: watch out for edge cases like "ß".
chrislarham at NOSPAM dot outlook dot com
5 years ago
I didn't see any explanation in the documentation as to precisely how the positive/negative return values are calculated for unequal strings.

After a bit of experimentation it appears that it's the difference in alphabetical position of the first character in unequal strings.

For example, the letter 'z' is the 26th letter while the letter 'a' is the 1st letter:


= "zappl";
$apple = "apple";

strcasecmp($zappl, $apple); #outputs 25 [26 - 1]
echo strcasecmp($apple, $zappl); #outputs -25 [1 - 26]


This might be incredibly obvious to most people, but hopefully it will clarify the calculation process for some others.
21 years ago
The sample above is only true on some platforms that only use a simple 'C' locale, where individual bytes are considered as complete characters that are converted to lowercase before being differentiated.

Other locales (see LC_COLLATE and LC_ALL) use the difference of collation order of characters, where characters may be groups of bytes taken from the input strings, or simply return -1, 0, or 1 as the collation order is not simply defined by comparing individual characters but by more complex rules.

Don't base your code on a specific non null value returned by strcmp() or strcasecmp(): it is not portable. Just consider the sign of the result and be sure to use the correct locale!
alvaro at demogracia dot com
13 years ago
Don't forget this is a single-byte function: in Unicode strings it'll provide incoherent results as soon as both strings differ only in case. There doesn't seem to exist a built-in multi-byte alternative so you need to write your own, taking into account both character encoding and collation.
To Top