简介
在开发中,我们经常对某些字段进行验证,比如是否为空,是否符合字符个数限制等。FormCheck是个简单的工具类,可以批量验证字段,并返回结果。
目前支持的类型如下:
type, 具体类型包括,string,array,email,url,date,date支持闰年的验证
require, 检查是否为空
min_length, 最少字符
max_length, 最多字符
regexp, 正则匹配
结果返回包括两种方式,json和抛出异常。
代码实现
核心代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/** * check * * @param array $fields $fields = array( * array('field' => '', 'type'=> '', 'value'=> '', 'require' => true, 'errmsg' =>‘’), * array('field' => '', 'type'=> '', 'value'=> '', 'min_length' => 8), * ) * @param mixed $returnType * @static * @access public * @return void */ public static function check(array $fields, $returnType = self::RETURN_TYPE_JSON) { if (!$fields || !is_array($fields)) { throw new InvalidArgumentException('invalid fields'); } foreach ($fields as $field) { if (!is_array($field)) { throw new InvalidArgumentException('invalid fields'); } if (!$field['field']) { throw new InvalidArgumentException('field is not empty'); } // 检查key的交集 $fieldsDiff = array_diff(array_keys($field), self::$_allow_fields); if ($fieldsDiff) { throw new InvalidArgumentException('fields:' . '\'' . join(',', $fieldsDiff) . '\'' . ' not allowed.'); } foreach ($field as $key => $val) { if (in_array($key, self::$_operate)) { list($errcode, $errmsg) = forward_static_call_array(array('FormCheck', '_'. $key), array($field)); if ($errcode) { return self::_error($errcode,$errmsg, $field, $returnType); } } } } return array('errcode' => 0, 'errmsg' => 'ok'); } |
$fields是一个数组,其中的每一项是具体的字段验证,其中也是数组表示的。
我们用forward_static_call_array调用具体的验证操作。比如是type的验证,则是通过_type函数来具体实现。如果验证有错误,通过函数_error处理,否则返回正确的信息。
测试用例
字段验证正确
1 2 3 4 5 |
$fields = array(); $fields[] = array('field' => 'name', 'value'=> 'bruce', 'type'=> 'string', 'min_length' => 5); $fields[] = array('field' => 'date', 'value'=> '2006-1-1 00:00:00', 'type'=> 'date'); $res = FormCheck::check($fields); print_r($res); |
返回
1 2 3 4 5 |
Array ( [errcode] => 0 [errmsg] => ok ) |
字段验证失败
1 2 3 4 5 |
$fields = array(); $fields[] = array('field' => 'name', 'value'=> 'bruce', 'type'=> 'string', 'min_length' => 6); $fields[] = array('field' => 'date', 'value'=> '2006-1-1 00:00:00', 'type'=> 'date'); $res = FormCheck::check($fields); print_r($res); |
返回
1 2 3 4 5 |
Array ( [errcode] => 3 [errmsg] => name's length at least 6 length ) |
验证失败时,还可以选择用异常形式返回
1 2 3 |
$fields = array(); $fields[] = array('field' => 'name', 'value'=> 'bruce', 'type'=> 'string', 'min_length' => 6, 'errmsg' => '失败时可以指定errmsg返回消息'); FormCheck::check($fields, FormCheck::RETURN_TYPE_EXCEPTION); |
总结
使用简单,只需调用一个函数就可以进行简单的字段验证,尤其适用于表单验证。
代码参考:https://github.com/bruceding/FormChecker