$ _POST变量中的正则表达式

时间:2017-01-15 14:40:30

标签: php regex wordpress post

我正在为wordpress创建一个插件 - woocommerce。我正在使用插件“Woocommerce Product Addons” - 这个插件我可以插入例如属性“颜色”的下拉选择列表,其中包含三种颜色 - 红色,黄色,黑色。此插件现在位于每个产品站点上,但表单名称在每个产品上都有不同的名称。这就是为什么我不知道如何用更少的代码获取数据的原因。

在一个产品网站上,我有一个名为的选择列表:

<select class="addon addon-select" name="addon-12822-variante-0">

在另一个产品网站上,我有相同的插件但另一个名称:

<select class="addon addon-select" name="addon-12834-variante-0">

您可以从此示例中看到,名称中的数字会在每个网站上发生变化。

我需要一个可以在所有产品网站上运行的代码,这就是为什么我想也许我可以在 $ _ POST ['regex'] 中以某种方式插入正则表达式,但这是如何工作的?

我需要这个正则表达式“((addon) - ((\ d)+) - )(farbe) - (0 | 1 | 2 | 3)”。

最后我有类似

的东西
$variant = $_POST['regexp'];

在每个产品网站上自动生效。

我希望有任何解决方法,并提前感谢每一个建议。

3 个答案:

答案 0 :(得分:4)

您可以使用preg_grep从$ _POST数组中提取所需的元素:

$addonFields = array_flip(preg_grep('(your_pattern)', array_flip($_POST)));

编辑:由于@CaTeR注意到如果多次出现相同的值(或多个空值),上面的代码将无效。请参阅下面的其他答案,或使用类似的方法获取您想要的字段:

$addonFields = array_intersect_key($_POST, array_flip(preg_grep('/pattern/', array_keys($_POST))));

答案 1 :(得分:2)

您可以使用array_keys获取keys的{​​{1}},然后使用preg_grep获取正确的array。在下一行中,您将获得一个包含keys addons中包含的所有$_POST字段的索引数组。

  

注意:使用array_values,您将获得一个新的array新订单array,这样您就可以获得想要获得正确索引的值

keys

这里有一个Ideone示例来了解上一代码的功能。

现在,下一个函数为您获取array_values(preg_grep('/^addon\-\d+\-variante-\d+$/', array_keys($_POST))); 变量的第一个addon变量的值(假设您希望在每个页面中获得一个$_POST变量):< / p>

addon

这里有一个Ideone代码段,上面有完整的示例。

答案 2 :(得分:1)

如果您不知道将通过帖子接收哪些数据并希望对数据运行正则表达式,您可以执行以下操作:

<?php foreach($_POST as $sPostKey => $sPostVal){
    if(preg_match($pattern, $sPostVal)){
    //do something with match
    }
 } ?>

假设$ pattern是正则表达式。 $ sPostKey是键,$ sPostVal包含数据