Fork me on GitHub
a Sensio Labs Product

Persian Successor (v3.68.1) edition

Rule modernize_strpos

Replace strpos() and stripos() calls with str_starts_with() or str_contains() if possible.

Warning

Using this rule is risky

Risky if strpos, stripos, str_starts_with, str_contains or strtolower functions are overridden.

Configuration

modernize_stripos

Whether to modernize stripos calls as well.

Allowed types: bool

Default value: false

Examples

Example #1

Default configuration.

--- Original
+++ New
 <?php
-if (strpos($haystack, $needle) === 0) {}
-if (strpos($haystack, $needle) !== 0) {}
-if (strpos($haystack, $needle) !== false) {}
-if (strpos($haystack, $needle) === false) {}
+if (str_starts_with($haystack, $needle)  ) {}
+if (!str_starts_with($haystack, $needle)  ) {}
+if (str_contains($haystack, $needle)  ) {}
+if (!str_contains($haystack, $needle)  ) {}

Example #2

With configuration: ['modernize_stripos' => true].

--- Original
+++ New
 <?php
-if (strpos($haystack, $needle) === 0) {}
-if (strpos($haystack, $needle) !== 0) {}
-if (strpos($haystack, $needle) !== false) {}
-if (strpos($haystack, $needle) === false) {}
-if (stripos($haystack, $needle) === 0) {}
-if (stripos($haystack, $needle) !== 0) {}
-if (stripos($haystack, $needle) !== false) {}
-if (stripos($haystack, $needle) === false) {}
+if (str_starts_with($haystack, $needle)  ) {}
+if (!str_starts_with($haystack, $needle)  ) {}
+if (str_contains($haystack, $needle)  ) {}
+if (!str_contains($haystack, $needle)  ) {}
+if (str_starts_with(strtolower($haystack), strtolower($needle))  ) {}
+if (!str_starts_with(strtolower($haystack), strtolower($needle))  ) {}
+if (str_contains(strtolower($haystack), strtolower($needle))  ) {}
+if (!str_contains(strtolower($haystack), strtolower($needle))  ) {}

Rule sets

The rule is part of the following rule sets:

References

The test class defines officially supported behaviour. Each test case is a part of our backward compatibility promise.