为什么我的preg_match_all不起作用?

时间:2017-03-09 07:39:46

标签: php preg-match preg-match-all

我正在使用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';
}

3 个答案:

答案 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[]112的所有值时,这段简单的代码比{{{}}更快1}}并且它更容易理解:

preg_match()