скажем, у меня есть 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. Он также возвращает true с $ string2. Пожалуйста помоги!
Если строка должна содержать 1
, 2
, 3
, 4
и 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'; } ?>
Какие результаты:
Ю.Н.
DEMO