使用通配符或正则表达式获取POST变量

时间:2012-11-08 09:16:43

标签: php

如何使用正则表达式获取POST变量:

$var = $_POST['foo?'];

$var = $_POST['foo\w{1}'];

编辑:

我的表单有许多具有不同名称的按钮:file1,file2,file3。当按下按钮时,它当然会传递file1或file2,...我想使用该名称获取值。

5 个答案:

答案 0 :(得分:1)

在数组中循环运行,并检查键

像:

// some POST: array('a' => 1, 'b' => 2, 'cc11' => 6666666)

foreach( $_POST as $k => $v ) {
   if ( preg_match('#^[^\d]+$#', $k) ) { // not number key 
      // you actions ...
   }
}

答案 1 :(得分:1)

你必须遍历$ _POST数组:

$regex = "@foo\w{1}@";
$vars = array();

foreach($_POST as $name=>$value) {
    if(preg_match($regex, $name)) {
        $vars[$name] = $value;
    }
}

希望这有帮助。

答案 2 :(得分:1)

我能想到的最简单的事情是:

$allPostKeys = implode(',',array_keys($_POST));
$wildcardVals = array();
if (preg_match_all('/,?(foo[0-9]),?/',$allPostKeys,$matches))
{
    $wildCardKeys = $matches[1];
    while($key = array_shift($wildCardKeys))
    {
        $wildcardVals[$key] = $_POST[$key];
    }
}
if (!empty($wildcardVals))
{//do stuff with all $_POST vals that you needed
}

将正则表达式中的[0-9]替换为.以匹配任何字符,或者您需要查看匹配的内容。
使用具有以下键bar,zar,foo1,foo2,foo3的数组对其进行了测试,并返回array('foo1' => 'val1','foo2' => 'val2','foo3' => 'val3'),这是您所需要的,我认为。

响应您的编辑
$_POST超全局也可以是多维数组:

<input type="file" name="file[]" id="file1"/>
<input type="file" name="file[]" id="file2"/>
<input type="file" name="file[]" id="file3"/>

这样,您就可以轻松遍历文件:

foreach($_POST['file'] as $file)
{
    //process each file individually: $file is the value
}

答案 3 :(得分:1)

在您的情况下,您可以这样做:

<?php
    $_POST = array(
        "foo" => "bar",
        "file1" => "something",
        "file2" => "somethingelse",
        "file3" => "anothervalue",
        "whocares" => "aboutthis"
    );
    $files = array();
    foreach ($_POST as $key => $value) {
        if (preg_match("/file(\d+)/", $key, $match)) {
            $files[$match[1]] = $value;
        }
    }
    print_r($files);
?>

输出(密钥与文件[ NUMBER ]匹配):

Array ( 
    [1] => something 
    [2] => somethingelse 
    [3] => anothervalue 
)

答案 4 :(得分:1)

将表单字段命名为数组数据结构:

<input name="files[]" ...>

foreach ($_POST['files'] as $file) {
    ...
}