说我有这样的表格:
<form method="post">
<select name="s[]" multiple="multiple">
<option value="12345678">One</option>
<option value="a7e6b65e">Two</option>
<option value="ad2445f7">Three</option>
<option value="998d64fe">Four</option>
</select>
<input type="submit" value="GO">
</form>
提交表单后,我可以使用其中一个Filters functions来确保数据正常吗?我的第一个想法是filter_input_array
,但我认为不是这样。
我看到的唯一方法是首先检查我是否有数组,然后循环显示值:
$s_clean = array();
if (isset($_POST['s']) && is_array($_POST['s'])) {
foreach ($_POST['s'] as $o) {
$s_clean[] = filter_var($o, FILTER_VALIDATE_REGEXP, array('options' => array('regexp' => '/^[0-9a-f]{8}$/')));
}
}
有更简单的方法吗?
答案 0 :(得分:1)
您应该已经在数组中提供了可能的选项值。 只需验证在帖子中检索的选项是否在数组中定义。
if (!in_array($o, $options)) {
//Throw some validation error here
}
答案 1 :(得分:1)
是的,请参阅array_filter:http://php.net/manual/en/function.array-filter.php
在PHP 5.4中你可以做到
$s=$_POST['s'];
if (!$s || !is_array($s)
$s=array();
else
$s=array_filter($s, function ($value) { return preg_match('/regex/',$value); });
答案 2 :(得分:0)
感谢Bram和b7kich,他们每个人都给了我解决方案的一部分,因为它不会出现过滤器功能在这里有用。
拥有可能值列表的想法很棒(doh!),并查看我找到的array_*
函数array_intersect
,它会过滤掉任何非有效的&#39;值。
$valid = array('12345678','a7e6b65e','ad24d5f7','998d64fe');
if (!isset($_POST['s']) || !($s = $_POST['s']) || !is_array($s))
$s_clean = array();
else
$s_clean = array_intersect($s, $valid);