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)

Demo

你想要 str_contains() 的不区分大小写的版本 简短的回答是:没有。

长答案是:区分大小写取决于编码和区域设置。当您将这些信息添加到假设的 str_icontains() 时,您已经重新创建了 mb_stripos()。 TL;DR - 不要这样做。

只需事先将字符串和 haystack 都转换为小写

$string = strtolower($originalString);
$haystack = strtolower($originalHaystack);
$isMatched = str_contains($originalHaystack,$originalString);