假设我有 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。请帮忙!
如果字符串必须包含1
, 2
, 3
, 4
and 5
,那么您应该使用正则表达式模式
/^(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5).*/
可以进一步优化...例如:
/^(?=.*1)(?=.*2)(?=.*3)(?=.*4).*5/
如果不允许使用其他字符,则应使用正则表达式模式
/^(?=.*1)(?=.*2)(?=.*3)(?=.*4)(?=.*5)[1-5]*$/
您也可以使用以下方法进行检查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