我正在使用preg_match_all
来确保字符串遵循某种模式。
它应该显示所有条件都满足'因为字符串遵循模式,但相反,它会显示符合条件的条件'。
$order = "item[]=2&item[]=1&item[]=3&item[]=4&item[]=5&item[]=6&item[]=7&item[]=8&item[]=9&item[]=10&item[]=11&item[]=12";
$pattern = "/^(item\[\]=([1-9]|10|11|12))(&(item\[\]=([1-9]|10|11|12))){11}$/";
if(preg_match($pattern, $order)) {
// check for repetition
$matches = [];
preg_match_all("/\d+/", $order, $matches);
if(count(array_count_values($matches[0])) == 12) {
// All are unique values
echo 'All conditions met';
}
}else{
echo 'Conditions not met';
}
答案 0 :(得分:1)
正确的方法是使用
parse_str
(解析问题字符串:用&
分隔的键/值对)和{{ 1}}(检查所需范围array_diff
中的所有数字是否存在且不重复)函数:
1-12
答案 1 :(得分:0)
试试这个:
<?php
$order = "item[]=2&item[]=1&item[]=3&item[]=4&item[]=5&item[]=6&item[]=7&item[]=8&item[]=9&item[]=10&item[]=11&item[]=12";
$pattern = "/^(item\[\]=([1-9]|10|11|12))(&(item\[\]=([1-9]|10|11|12))){11}$/";
if(preg_match($pattern, $order)) {
// check for repetition
$matches = [];
preg_match_all("/\d+/", $order, $matches);
if(count(array_count_values($matches[0])) == $movienumber) {
// All are unique values
echo 'All conditions met';
}
}else{
echo 'Conditions not met';
}
你错过了)
模式。
答案 2 :(得分:0)
假设输入字符串有效(满足所有条件),当它包含item[]
中1
到12
的所有值时,这段简单的代码比{{{}}更快1}}并且它更容易理解:
preg_match()