Php check if string contains substring

PHP String contains a Substring various methods

In this short tutorial, we look at how to check if a PHP string contains a substring. We also look at the other relevant string manipulation methods.

However, in case you are here only for the solution use this link.

Table of Contents — PHP string contains

Why check if a PHP string contains a substring?

While writing code, it is a common practice to check if a string contains a substring. Subsequently, each language comes with a few methods that can be used to do the same.

The string contains (str_contains) is the most commonly used method in PHP. However, the methods you chose would be decided based on your use cases.

If you are looking to just check if a string contains a substring you can use the str_contains function. However, if you are looking to check if a substring exists and to return its index, the stripos and strpos methods can be used.

With that out of the way let us look at all these methods in depth.

Читайте также:  Python выполнить команду bash

Using str_contains

The str_contains is a new function that was introduced in PHP 8. This method is used to check if a PHP string contains a substring.

The function checks the string and returns a boolean true in case it exists and false otherwise. However, keep in mind that str_contains is case-sensitive. Ensure that the substring used to search is in the right case, or you could use the strtolower() method.

Syntax of PHP str_contians :

str_contains(string, substring) 

Parameters:

string — Required, the original string that you intend to search

substring — Required, the substring that you are looking to check if the PHP string contains

Code & Explanation:

$string = "Hire the top 1% freelance developers" if (str_contains($string, 'Hire')) < echo "PHP string contains 'Hire'"; >else < echo "PHP string does not contain 'Hire"; >//Output: "PHP string contains 'Hire'" 

The str_contains returns a boolean true or false and hence is often placed inside a conditional statement.

As aforementioned, the str_contains method is case-sensitive, here is an example of the same:

$string = "Hire the top 1% freelance developers" if (str_contains($string, 'hire')) < echo "PHP string contains 'Hire'"; >else < echo "PHP string does not contain 'Hire"; >//Output: PHP string does not contain 'Hire" 

To avoid such cases you could ensure that the substring used to search is in the right case, or you could use the strtolower() method.

Using stripos , strpos and strrpos

This method is used to check and return the index of the substring in case the PHP string contains it. The following methods can be used to achieve this.

The stripos method checks if a PHP string contains a substring, and returns the index of the first occurrence of the substring.

However, the stripos method is case-insensitive, and if you are looking to case-sensitively check if a PHP string contains a substring you can use the strpos methods.

Lastly, unlike the previous methods, strrpos returns the last occurrence of the substring.

Syntax of stripos , strpos and strrpos

//Syntax of stripos stripos(string, substring, start) //Syntax of strpos strpos(string, substring, start) //Syntax of strrpos strrpos(string, substring, start) 

Parameters:

string — Required, the original string that you are looking to search

substring — Required, the substring that you are looking to check if the string contains

start — Optional, specific where the search for the substring should begin

Returns:

When used to check if a PHP string contains a substring all three methods return an index between 0 to n-1 and return false if the substring is not found.

However, given that 0 is also a falsy value, remember to use the identical or not identical operator === or !== and not the equal to operator == as 0 also would be considered as false.

Code & Explanation:

$string = "Hire the top 1% freelance developers" $substring_index = stripos($string, "Top"); if($substring_index !== false) < echo "'Top' is a substring!"; >if($substring_index !== false) < echo "'top' is a substring!"; >// Output = 'Top' is a substring! // Output = 'top' is a substring! 

As stripos is case insensitive, it does not return a false when used to check if the PHP string contains the ‘Top’ substring. However, this is not the case when strpos or strrpos are used.

Now, let’s look at a case where the index is 0.

$string = "Hire the top 1% freelance developers" $substring_index = stripos($string, "Hire"); if($substring_index != false) < echo "'Hire' is a substring"; >else < echo "'Hire' is not a substring"; >//Output = "'Hire' is not a substring" if($substring_index !== false) < echo "'Hire' is a substring"; >else < echo "'Hire' is not a substring"; >//Output = "'Hire' is a substring" 

As you can see the initial != operator considers 0 as false and returns a negative output. This is why it is important to use identical operators while using these methods.

PHP string contains — Limitation & Caveats:

  • While using the latter functions to check if a PHP string contains a value, remember to use the identical operators.
  • Not all methods are case-insensitive, ensure to use the strtolower() method

We work with skilled PHP developers to build amazing products. Do check out our services.

Источник

str_contains

Performs a case-sensitive check indicating if needle is contained in haystack .

Parameters

The substring to search for in the haystack .

Return Values

Returns true if needle is in haystack , false otherwise.

Examples

Example #1 Using the empty string »

if ( str_contains ( ‘abc’ , » )) echo «Checking the existence of the empty string will always return true» ;
>
?>

The above example will output:

Checking the existence of the empty string will always return true

Example #2 Showing case-sensitivity

$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 above example will output:

The string 'lazy' was found in the string "Lazy" was not found because the case does not match

Notes

Note: This function is binary-safe.

See Also

  • 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() — Find the position of the first occurrence of a case-insensitive substring in a string
  • strrpos() — Find the position of the last occurrence of a substring in a string
  • strripos() — Find the position of the last occurrence of a case-insensitive substring in a string
  • strstr() — Find the first occurrence of a string
  • strpbrk() — Search a string for any of a set of characters
  • substr() — Return part of a string
  • preg_match() — Perform a regular expression match

User Contributed Notes 7 notes

For earlier versions of PHP, you can polyfill the str_contains function using the following snippet:

// 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 ;
>
>
?>

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 ?: «»`;

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

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];

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);
>

// 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 ;
>
>

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

Источник

How to Check if a String Contains Another Substring in PHP

Monty Shokeen

Monty Shokeen Last updated Feb 26, 2021

A lot of times when I am working with strings in PHP, it becomes important to check if a string contains another substring. PHP has a lot of functions to help you manipulate strings any way you like. We will be using some of these functions today to learn how to check if a string contains a specific substring.

Using New Functions in PHP 8

Three new functions have been added in PHP 8 to help us figure out if a string contains another substring. Please keep in mind that all these functions are case sensitive, and checking for the existence of an empty substring with them will always return true .

  1. str_contains() checks if a string contains a specific substring.
  2. str_ends_with() checks if a string ends with a specific substring.
  3. str_starts_with() checks if a string starts with a specific substring.
$sentence = "Dolphins and Elephants are intelligent animals."; 
if(str_contains($sentence, "Elephants"))  
echo 'Elephants are intelligent.'; 
// Elephants are intelligent. 
if(str_starts_with($sentence, "Dolphins"))  
echo 'Dolphins are intelligent.'; 
echo 'There is a full stop at the end of the sentence.'; 
// There is a full stop at the end of the sentence. 

As I mentioned earlier, these functions perform a case-sensitive match. You can also perform a case-insensitive match with them by first converting both the string and substring to the same case using strtolower() or strtoupper() .

These functions are ideal if you don’t want to get any extra information about the substrings, like their position. People who need extra information about the match should consider using the functions below.

Using strpos() and stripos()

You can use the PHP strpos() function to get the position of the first occurrence of a substring in a string. The function will return false if it cannot find the substring.

When you use strpos() to check for a substring, make sure that you use the strict inequality operator. This is because the position returned by strpos() starts with 0, and 0 can also equate to false . Using a regular equality check will give you false negatives if the substring is right at the beginning of the main string.

Here are some examples of strpos() :

Источник

Оцените статью