-4

我的代码中有很多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)

如何使它与 new 一起使用str_contains()

var_dump(str_contains($str1, $str2)); // gives bool(false)

演示

4

3 回答 3

12

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

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

于 2020-07-27T18:59:02.207 回答
1

就我个人而言,我会首先将输入转换为小写,然后进行比较,所以大小写无关紧要。除非您使用特殊字符,否则这基本上应该在大多数情况下都有效。

<?php
function str_icontains($haystack, $needle) {
$smallhaystack = strtolower($haystack);  // make the haystack lowercase, which essentially makes it case insensitive
$smallneedle = strtolower($needle);  // makes the needle lowercase, which essentially makes it case insensitive
if (str_contains($smallhaystack, $smallneedle)) {  // compares the lowercase strings
return 'true';  // returns true (wow)
} else {
return 'false';  // returns false (wow)
}
}

echo str_icontains('HElLo', 'ell'); // true
echo str_icontains('Lorem', 'iPsum'); // false
echo str_icontains('TOBIAGAMESYT', 'bIaG'); // true
?>

沙盒

于 2021-06-17T17:44:51.913 回答
-1

我有一个技巧。

if(is_int(stripos("Hello good world", "HELLO"))){
    echo "contains";
}
else{
    echo "not contains";
};

o/p:包含

于 2021-05-26T11:13:36.247 回答