如何使用正则表达式获取 POST 变量,如下所示:
$var = $_POST['foo?'];
或者
$var = $_POST['foo\w{1}'];
编辑:
我的表单有许多不同名称的按钮:file1、file2、file3。当按下按钮时,它当然会传递文件 1 或文件 2,...我想使用该名称获取值。
如何使用正则表达式获取 POST 变量,如下所示:
$var = $_POST['foo?'];
或者
$var = $_POST['foo\w{1}'];
编辑:
我的表单有许多不同名称的按钮:file1、file2、file3。当按下按钮时,它当然会传递文件 1 或文件 2,...我想使用该名称获取值。
在数组中循环运行,并检查键
像:
// some POST: array('a' => 1, 'b' => 2, 'cc11' => 6666666)
foreach( $_POST as $k => $v ) {
if ( preg_match('#^[^\d]+$#', $k) ) { // not number key
// you actions ...
}
}
您必须遍历 $_POST 数组:
$regex = "@foo\w{1}@";
$vars = array();
foreach($_POST as $name=>$value) {
if(preg_match($regex, $name)) {
$vars[$name] = $value;
}
}
希望这可以帮助。
我能想到的最简单的事情是:
$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
}
在你的情况下,你可以这样做:
<?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
)
将表单字段命名为数组数据结构:
<input name="files[]" ...>
foreach ($_POST['files'] as $file) {
...
}