str_contains
(PHP 8)
str_contains — Determine if a string contains a given substring
说明
str_contains(string
$haystack
, string $needle
): bool
Performs a case-sensitive check indicating if needle
is contained
in haystack
.
参数
-
haystack
-
The string to search in.
-
needle
-
The substring to search for in the
haystack
.
返回值
Returns true
if needle
is in
haystack
, false
otherwise.
范例
示例 #1 Using the empty string ''
<?php
if (str_contains('abc', '')) {
echo "Checking the existence of the empty string will always return true";
}
?>
以上例程会输出:
Checking the existence of the empty string will always return true
示例 #2 Showing case-sensitivity
<?php
$string = 'The lazy fox jumped over the fence';
if (str_contains($string, 'lazy')) {
echo "The string 'lazy' was found in the string\n";
}
if (str_contains($string, 'Lazy')) {
echo 'The string "Lazy" was found in the string';
} else {
echo '"Lazy" was not found because the case does not match';
}
?>
以上例程会输出:
The string 'lazy' was found in the string "Lazy" was not found because the case does not match
注释
注意: 此函数可安全用于二进制对象。
参见
- str_ends_with() - Checks if a string ends with a given substring
- str_starts_with() - Checks if a string starts with a given substring
- stripos() - 查找字符串首次出现的位置(不区分大小写)
- strrpos() - 计算指定字符串在目标字符串中最后一次出现的位置
- strripos() - 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
- strstr() - 查找字符串的首次出现
- strpbrk() - 在字符串中查找一组字符的任何一个字符
- substr() - 返回字符串的子串
- preg_match() - 执行匹配正则表达式

User Contributed Notes 8 notes
scm6079 ¶
1 year ago
For earlier versions of PHP, you can polyfill the str_contains function using the following snippet:
<?php
// based on original work from the PHP Laravel framework
if (!function_exists('str_contains')) {
function str_contains($haystack, $needle) {
return $needle !== '' && mb_strpos($haystack, $needle) !== false;
}
}
?>
aisunny7 dot xy at gmail dot com ¶
4 months ago
The polyfill that based on original work from the PHP Laravel framework had a different behavior;
when the $needle is `""` or `null`:
php8's will return `true`;
but, laravel'str_contains will return `false`;
when php8.1, null is deprecated, You can use `$needle ?: ""`;
juliyvchirkov at gmail dot com ¶
10 months ago
<?php
// Polyfill for PHP 4 - PHP 7, safe to utilize with PHP 8
if (!function_exists('str_contains')) {
function str_contains (string $haystack, string $needle)
{
return empty($needle) || strpos($haystack, $needle) !== false;
}
}
drupalista dot com dot br at gmail dot com ¶
1 month ago
private function contains(array $needles, string $type, string $haystack = NULL, string $filename = NULL) : bool {
if (empty($needles)) return FALSE;
if ($filename)
$haystack = file_get_contents($filename);
$now_what = function(string $needle) use ($haystack, $type) : array {
$has_needle = str_contains($haystack, $needle);
if ($type === 'any' && $has_needle)
return ['done' => TRUE, 'return' => TRUE];
if ($type === 'all' && !$has_needle)
return ['done' => TRUE, 'return' => FALSE];
return ['done' => FALSE];
};
foreach ($needles as $needle) {
$check = $now_what($needle);
if ($check['done'])
return $check['return'];
}
return TRUE;
}
function containsAny(array $needles, string $haystack = NULL, string $filename = NULL) : bool {
return self::contains($needles, 'any', $haystack, $filename);
}
function containsAll(array $needles, string $haystack = NULL, string $filename = NULL) : bool {
return self::contains($needles, 'all', $haystack, $filename);
}
olivertasche+nospam at gmail dot com ¶
1 year ago
The code from "me at daz dot co dot uk" will not work if the word is
- at the start of the string
- at the end of the string
- at the end of a sentence (like "the ox." or "is that an ox?")
- in quotes
- and so on.
You should explode the string by whitespace, punctations, ... and check if the resulting array contains your word OR try to test with a RegEx like this:
(^|[\s\W])+word($|[\s\W])+
Disclaimer: The RegEx may need some tweaks
AuxData ¶
6 months ago
Until PHP 8 was released, many-a-programmer were writing our own contain() functions. Mine also handles needles with logical ORs (set to '||').
Here it is.
function contains($haystack, $needle, $offset){
$OR = '||';
$result = false;
$ORpos = strpos($needle, $OR, 0);
if($ORpos !== false){ //ORs exist in the needle string
$needle_arr = explode($OR, $needle);
for($i=0; $i < count($needle_arr); $i++){
$pos = strpos($haystack, trim($needle_arr[$i]), $offset);
if($pos !== false){
$result = true;
break;
}
}
} else {
$pos = strpos($haystack, trim($needle), $offset);
if($pos !== false){
$result = true;
}
}
return($result);
}
Call: contains("Apple Orange Banana", "Apple || Walnut", 0);
Returns: true
kadenskinner at gmail dot com ¶
1 year ago
<?php
$needle = '@';
$haystack = 'user@example.com';
if (!str_contains($haystack, $needle)){
echo 'There is not an @ in haystack';
}else{
echo 'There is an @ in haystack';
}
me at daz dot co dot uk ¶
1 year ago
# Watch out for aberrant partial matches
$string = 'The lazy fox jumped over the fence';
if (str_contains($string, 'ox')) {
echo 'The string "ox" was found in the string because it was a partial match';
} else {
echo '"ox" was not found';
}
//output: The string "ox" was found in the string because it was a partial match
# use spaces for full word matching
$string = 'The lazy fox jumped over the fence';
if (str_contains($string, ' ox ')) {
echo 'The string " ox " was found in the string because it was a partial match';
} else {
echo '" ox " was not found';
}
//output: " ox " was not found
备份地址:http://www.lvesu.com/blog/php/function.str-contains.php