3v4l.org

run code in 300+ PHP versions simultaneously
<?php abstract class Filter { abstract public static function check($value, array $options = array()); } final class IntFilter { public static function check($value, array $options = array()) { return $value; } } final class StringFilter { public static function check($value, array $options = array()) { if (false === is_string($value)) { return false; } if (false !== ($options['trim'] ?? true)) { $value = trim($value); } $length = mb_strlen($value, '8bit'); if ((false === ($options['empty'] ?? true)) && (0 === $length)) { return false; } foreach (['min', 'max'] as $name) { $optionLength = IntFilter::check($options['min'], ['min' => 1]); if (('min' === $name && $length < $optionLength) || ('max' === $name && $length > $optionLength)) { return false; } } foreach (['startsWith', 'endsWith'] as $name) { if (isset($options[$name])) { $needle = StringFilter::check($options[$name]); if (false === self::$name($value, $needle)) { return false; } } } return $value; } private static function startsWith($haystack, $needle) { return $haystack[0] === $needle[0] ? strncmp($haystack, $needle, mb_strlen($needle, '8bit')) === 0 : false; } private static function endsWith($haystack, $needle) { return self::startsWith(mb_substr($haystack, -mb_strlen($needle, '8bit')), $needle); } } var_dump(StringFilter::check(' r a ', ['min' => 4])); var_dump(StringFilter::check(' r a ', ['max' => 4])); var_dump(StringFilter::check(' r a ', ['min' => 4, 'max' => 4])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'r'])); var_dump(StringFilter::check(' r a ', ['endsWith' => 'a'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'r', 'endsWith' => 'a'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'r at'])); var_dump(StringFilter::check(' r a ', ['endsWith' => 'r at'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'r at', 'endsWith' => 'r at'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'z'])); var_dump(StringFilter::check(' r a ', ['endsWith' => 'z'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'r', 'endsWith' => 'z'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'z', 'endsWith' => 'a'])); var_dump(StringFilter::check(' r a ', ['startsWith' => 'z', 'endsWith' => 'y']));
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
string(4) "r a" Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) string(4) "r a" Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false)
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 string(4) "r a" Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) string(4) "r a" Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false) Warning: Undefined array key "min" in /in/L7In7 on line 35 Warning: Undefined array key "min" in /in/L7In7 on line 35 bool(false)
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.31, 7.4.0 - 7.4.25, 7.4.27 - 7.4.33
string(4) "r a" Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) string(4) "r a" Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false) Notice: Undefined index: min in /in/L7In7 on line 35 Notice: Undefined index: min in /in/L7In7 on line 35 bool(false)
Output for 7.3.32 - 7.3.33, 7.4.26
string(4) "r a" bool(false) string(4) "r a" bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false) bool(false)

preferences:
161.09 ms | 402 KiB | 173 Q