2024 年日本 PHP 研討會

strcasecmp

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

strcasecmp二進位制安全忽略大小寫的字串比較

說明

strcasecmp(字串 $string1, 字串 $string2): 整數

二進位安全且不區分大小寫的字串比較。此比較不考慮地區設定;只有 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 則註解

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

?>

注意事項:請注意像 "ß" 這樣的邊緣案例。
20
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]

?>

這對大多數人來說可能非常明顯,但希望它能為其他人釐清計算過程。
9
匿名
22 年前
上述範例僅適用於某些僅使用簡單「C」語系環境的平台,其中個別位元組被視為完整字元,在進行區分之前會轉換為小寫。

其他語系環境(請參閱 LC_COLLATE 和 LC_ALL)使用字元排序順序的差異,其中字元可能是從輸入字串中擷取的位元組群組,或者只是返回 -1、0 或 1,因為排序順序不是簡單地通過比較個別字元來定義,而是通過更複雜的規則來定義。

不要將您的程式碼基於 strcmp() 或 strcasecmp() 返回的特定非空值:它不具可攜性。只需考慮結果的正負號,並確保使用正確的語系環境!
4
alvaro at demogracia dot com
14 年前
別忘了這是一個單一位元組函式:在 Unicode 字串中,只要兩個字串大小寫不同,它就會提供不一致的結果。似乎沒有內建的多位元組替代方案,因此您需要編寫自己的程式碼,同時考慮字元編碼和排序規則。
To Top