0

假设我有 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;}

此代码适用于 $string,但不适用于 $string2。它也使用 $string2 返回 true。请帮忙!

4

2 回答 2

0

如果字符串必须包含1, 2, 3, 4and 5,那么您应该使用正则表达式模式

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

可以进一步优化...例如:

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

如果不允许使用其他字符,则应使用正则表达式模式

/^(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)[1-5]*$/
于 2013-11-09T12:58:48.873 回答
0

您也可以使用以下方法进行检查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;
    }
?>

利用:

<?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';
    }
?>

哪个输出:

YN

演示

于 2013-11-09T13:07:57.393 回答