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 此函数现在返回 -11,而以前返回负数或正数。

示例

示例 #1 strcasecmp() 示例

<?php
$var1
= "Hello";
$var2 = "hello";
if (
strcasecmp($var1, $var2) == 0) {
echo
'$var1 在不区分大小写的字符串比较中等于 $var2';
}
?>

参见

  • strcmp() - 二进制安全字符串比较
  • preg_match() - 执行正则表达式匹配
  • substr_compare() - 从偏移量开始的两个字符串的二进制安全比较,最多为长度个字符
  • strncasecmp() - 前 n 个字符的二进制安全不区分大小写的字符串比较
  • stristr() - 不区分大小写的 strstr
  • substr() - 返回字符串的一部分

添加注释

用户贡献的注释 4 个注释

chris at cmbuckley dot co dot uk
12 年前
一个简单的多字节安全不区分大小写的字符串比较

<?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));
}

?>

注意:注意像 "ß" 这样的边缘情况。
chrislarham at NOSPAM dot outlook dot com
5 年前
我在文档中没有看到关于如何精确计算不相等字符串的正负返回值的解释。

经过一番实验,似乎它是字符串中第一个字符的字母顺序位置的差异。

例如,字母 'z' 是第 26 个字母,而字母 'a' 是第 1 个字母

<?php

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

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

?>

这对大多数人来说可能非常明显,但希望它能为其他人澄清计算过程。
匿名
21 年前
上面的示例仅在某些平台上有效,这些平台仅使用简单的 'C' 区域设置,其中单个字节被视为完整的字符,并在区分之前转换为小写。

其他区域设置(参见 LC_COLLATE 和 LC_ALL)使用字符的排序顺序差异,其中字符可能是从输入字符串中获取的字节组,或者 simply 返回 -1、0 或 1,因为排序顺序不能仅仅通过比较单个字符来定义,而是通过更复杂的规则。

不要根据 strcmp() 或 strcasecmp() 返回的特定非空值来编写代码:它不可移植。只需考虑结果的符号,并确保使用正确的区域设置!
alvaro at demogracia dot com
14 年前
不要忘记这是一个单字节函数:在 Unicode 字符串中,只要两个字符串仅在大小写方面不同,它就会提供不一致的结果。似乎不存在内置的多字节替代方案,因此您需要编写自己的方案,同时考虑字符编码和排序规则。
To Top