str_contains如何不区分大小写?
How to perform case insensitive str_contains?
我的代码中有很多 if(mb_stripos($hay, $needle) !== false)
。如何将其替换为 str_contains()
?
例如,我的代码中有这个辅助函数:
<?php
function str_contains_old(string $hay, string $needle): bool
{
return mb_stripos($hay, $needle) !== false;
}
$str1 = 'Hello world!';
$str2 = 'hello';
var_dump(str_contains_old($str1, $str2)); // gives bool(true)
$str1 = 'Część';
$str2 = 'cZĘŚĆ';
var_dump(str_contains_old($str1, $str2)); // gives bool(true)
$str1 = 'Część';
$str2 = 'czesc';
var_dump(str_contains_old($str1, $str2)); // gives bool(false)
如何让它与新的 str_contains()
一起工作?
var_dump(str_contains('Hello world!', 'hello')); // gives bool(false)
你想要 str_contains()
的不区分大小写的版本
简短的回答是:没有。
长答案是:区分大小写取决于编码和区域设置。当您将这些信息添加到假设的 str_icontains()
时,您已经重新创建了 mb_stripos()
。 TL;DR - 不要这样做。
只需事先将字符串和 haystack 都转换为小写
$string = strtolower($originalString);
$haystack = strtolower($originalHaystack);
$isMatched = str_contains($originalHaystack,$originalString);
我的代码中有很多 if(mb_stripos($hay, $needle) !== false)
。如何将其替换为 str_contains()
?
例如,我的代码中有这个辅助函数:
<?php
function str_contains_old(string $hay, string $needle): bool
{
return mb_stripos($hay, $needle) !== false;
}
$str1 = 'Hello world!';
$str2 = 'hello';
var_dump(str_contains_old($str1, $str2)); // gives bool(true)
$str1 = 'Część';
$str2 = 'cZĘŚĆ';
var_dump(str_contains_old($str1, $str2)); // gives bool(true)
$str1 = 'Część';
$str2 = 'czesc';
var_dump(str_contains_old($str1, $str2)); // gives bool(false)
如何让它与新的 str_contains()
一起工作?
var_dump(str_contains('Hello world!', 'hello')); // gives bool(false)
你想要 str_contains()
的不区分大小写的版本
简短的回答是:没有。
长答案是:区分大小写取决于编码和区域设置。当您将这些信息添加到假设的 str_icontains()
时,您已经重新创建了 mb_stripos()
。 TL;DR - 不要这样做。
只需事先将字符串和 haystack 都转换为小写
$string = strtolower($originalString);
$haystack = strtolower($originalHaystack);
$isMatched = str_contains($originalHaystack,$originalString);