strcasecmp

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

strcasecmp二进制安全比较字符串(不区分大小写)

说明

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

二进制安全比较字符串(不区分大小写)。比较不会注意区域;只有 ASCII 字母以不区分大小写的方式进行比较。

参数

string1

第一个字符串

string2

第二个字符串

返回值

如果 string1 小于 string2 返回 -1;如果 string1 大于 string2 返回 1;如果两者相等,返回 0

更新日志

版本 说明
8.2.0 现在此函数返回 -1 或者 1,之前返回负数或正数。

示例

示例 #1 strcasecmp() 示例

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

参见

  • strcmp() - 二进制安全字符串比较
  • preg_match() - 执行匹配正则表达式
  • substr_compare() - 二进制安全比较字符串(从偏移位置比较指定长度)
  • strncasecmp() - 二进制安全比较字符串开头的若干个字符(不区分大小写)
  • stristr() - strstr 函数的忽略大小写版本
  • substr() - 返回字符串的子串

add a note add a note

User Contributed Notes 4 notes

up
23
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
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!
up
5
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.
up
3
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:

<?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