PHP 8.4.2 Released!

strcasecmp

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

strcasecmp Vergleich von Zeichenketten ohne Unterscheidung der Groß- und Kleinschreibung (binärsicher)

Beschreibung

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

Groß- und kleinschreibungsunabhängiger Vergleich zweier Zeichenketten, der binärsicher ausgeführt wird. Der Vergleich ist nicht abhängig von der Locale-Einstellung; nur ASCII-Buchstaben werden auf diese Weise verglichen.

Parameter-Liste

string1

Die erste Zeichenkette.

string2

Die zweite Zeichenkette.

Rückgabewerte

Gibt einen Wert kleiner als 0 zurück, wenn string1 in der Reihenfolge der Sortierung vor string2 kommt; einen Wert größer als 0, wenn string1 nach string2 kommt, und 0, wenn sie gleich sind. Aus dem Wert kann außer seinem Vorzeichen keine bestimmte Bedeutung abgeleitet werden.

Changelog

Version Beschreibung
8.2.0 Diese Funktion gibt nicht mehr garantiert strlen($string1) - strlen($string2) zurück, wenn die Längen der Zeichenketten nicht gleich sind, sondern kann nun stattdessen -1 oder 1 zurückgeben.

Beispiele

Beispiel #1 strcasecmp()-Beispiel

<?php
$var1
= "Hallo";
$var2 = "hallo";
if (
strcasecmp($var1, $var2) == 0) {
echo
'$var1 ist gleich $var2 bei einem String-Vergleich'
. ' ohne Berücksichtigung von Groß- und Kleinschreibung';
}
?>

Siehe auch

  • strcmp() - Vergleich zweier Strings (binärsicher)
  • preg_match() - Führt eine Suche mit einem regulären Ausdruck durch
  • substr_compare() - Binärsicherer Vergleich zweier Strings, beginnend an einer bestimmten Position und endend nach einer festgelegten Länge
  • strncasecmp() - Binärsicherer Vergleich von Zeichenketten der ersten n Zeichen ohne Berücksichtigung der Groß- und Kleinschreibung
  • stristr() - Wie strstr, aber unabhängig von Groß- bzw. Kleinschreibung
  • substr() - Liefert einen Teil eines Strings

add a note

User Contributed Notes 4 notes

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

<?php

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

?>

Caveat: watch out for edge cases like "ß".
up
11
Anonymous
22 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!
up
6
alvaro at demogracia dot com
14 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.
up
0
chrislarham at NOSPAM dot outlook dot com
6 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:

<?php

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

echo
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.
To Top