如何执行不区分大小写的 str_contains?

Dha*_*man -8 php php-8

if(mb_stripos($hay, $needle) !== false)我的代码中有很多。我该如何替换它str_contains()

例如,我的代码中有这个辅助函数:

<?php

$str1 = 'Hello world!'; //coming from the database
$str2 = 'hello'; // coming from $_GET user input

function str_contains_old(string $hay, string $needle):bool {
    return mb_stripos($hay, $needle) !== false;
}

var_dump(str_contains_old($str1, $str2)); // gives bool(true)
Run Code Online (Sandbox Code Playgroud)

如何使它与 new 一起工作str_contains()

var_dump(str_contains($str1, $str2)); // gives bool(false)
Run Code Online (Sandbox Code Playgroud)

演示

Git*_*una 18

只需事先将 string 和 haystack 都转换为小写即可

$string = strtolower($originalString);
$haystack = strtolower($originalHaystack);
$isMatched = str_contains($originalHaystack,$originalString);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!但最后一行应该是: $isMatched = str_contains($haystack, $string); (2认同)

Sar*_*ara 10

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

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