使用像filter_var_array()这样的PHP过滤器函数有一种方法可以检查输入字符串的长度是否小于某个值

Cha*_*ntz 2 php callback filter

我一直在玩弄PHP过滤器库.我喜欢它,但我无法执行简单的过滤功能.我基本上想要使输入数组中的那些值无效,这些值是字符串并且长度超过某个值.有没有办法做到这一点,

$data = array('input_string_array' => array('aaa', 'abaa', 'abaca'));
$args = array(
    'component'    => array('filter'    => FILTER_DEFAULT,
                            'flags'     => FILTER_REQUIRE_ARRAY, 
                            'options'   => array('min_length' => 1, 'max_length' => 10)
                           )
);

var_dump(filter_var_array($data, $args));
Run Code Online (Sandbox Code Playgroud)

我试过这个,它给了我错误.因为可能没有min_length/max_length选项可用.但那么如何实现呢?还有一个地方提到所有这些选项,如max_range,min_range,regexp.

另外,我在FILTER_CALLBACK过滤器中的过滤器中有另一个疑问.我想知道是否有办法将数据以外的参数传递给被调用的函数?像这样的东西,

echo filter_var($string, FILTER_CALLBACK, array("options"=> array("lengthChecker", "5")));
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

Vol*_*erK 11

除非有更好,更直接的过滤器+选项,否则您可以使用FILTER_VALIDATE_REGEXP

$data = array('input_string_array' => array('', 'aaa', 'abaa', 'abaca'));
$args = array(
  'input_string_array' => array(
    'filter' => FILTER_VALIDATE_REGEXP,
    'flags'     => FILTER_REQUIRE_ARRAY|FILTER_NULL_ON_FAILURE,
    'options'   => array('regexp'=>'/^.{1,3}$/')
  )
);
var_dump(filter_var_array($data, $args));
Run Code Online (Sandbox Code Playgroud)

版画

array(1) {
  ["input_string_array"]=>
  array(4) {
    [0]=>
    NULL
    [1]=>
    string(3) "aaa"
    [2]=>
    NULL
    [3]=>
    NULL
  }
}
Run Code Online (Sandbox Code Playgroud)

要删除NULL元素,可以使用例如array_filter().