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';
}
あなたの '$ pattern'正規表現は不完全です、使用しているものを投稿しましたか? –
入力文字列はクエリ文字列のように見えます。私は['parse_str()'](http://php.net/manual/en/function.parse-str.php)を使って値を配列に入れ、配列に対する制約をチェックします。はるかに簡単です。 – axiac
これはhttp://stackoverflow.com/questions/42679522/make-sure-that-string-follows-the-required-formatの類似記事です。@AbraCadaverの解決策がありました。 'parse_str'関数を学んで使うべきです。 – RomanPerekhrest