PHP Conference Japan 2024

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() - 从偏移量开始,最多比较 length 个字符的两个字符串的二进制安全比较
  • 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
6 年前
我在文档中没有看到任何关于如何精确计算不相等字符串的正/负返回值的解释。

经过一些实验,似乎它是字符串中第一个不相等字符的字母顺序位置的差值。

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

<?php

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

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

?>

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

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

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