简体   繁体   English

使用PHP检查字符串中是否包含所有子字符串

[英]Check if all the substring are included in a string using PHP

let's say I have 2 set of string to check. 假设我要检查2组字符串。

$string = 12345;
$string2 = 15000;

//string must contain 1,2,3,4,5 to be returned true

if(preg_match('[1-5]',$string) {
    return true;
} else {
    return false;}

This code works for $string but not for $string2. 此代码适用于$ string,但不适用于$ string2。 It returns true too with $string2. $ string2也返回true。 Please help! 请帮忙!

If string must contain 1 , 2 , 3 , 4 and 5 , then you should use regex pattern 如果字符串必须包含12345 ,那么你就应该使用正则表达式模式

/^(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5).*/

which can be further optimize... for example: 可以进一步优化...例如:

/^(?=.*1)(?=.*2)(?=.*3)(?=.*4).*5/

If no other characters are allowed, then you should use regex pattern 如果不允许其他字符,则应使用正则表达式模式

/^(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)[1-5]*$/

You can check this with strpos as well: 您也可以使用strpos进行检查:

<?php
    function str_contains_all($string, $searchValues, $caseSensitive = false) {
        if (!is_array($searchValues)) {
            $searchValues = (string)$searchValues;
            $searchValuesNew = array();
            for ($i = 0; $i < strlen($searchValues); $i++) {
                $searchValuesNew[] = $searchValues[$i];
            }
            $searchValues = $searchValuesNew;
        }

        $searchFunction = ($caseSensitive ? 'strpos' : 'stripos');

        foreach ($searchValues as $searchValue) {
            if ($searchFunction($string, (string)$searchValue) === false) {
                return false;
            }
        }

        return true;
    }
?>

Use: 采用:

<?php
    $string = 12345;
    $string2 = 15000;

    if (str_contains_all($string, 12345)) {
        echo 'Y';
        if (str_contains_all($string2, 12345)) {
            echo 'Y';
        } else {
            echo 'N';
        }
    } else {
        echo 'N';
    }
?>

Which outputs: 哪个输出:

YN YN

DEMO 演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM