nguyenanhung / validation
验证模板 - 基础、简单和轻量级
v1.0.3
2024-09-21 19:54 UTC
Requires
- php: >=7.0
- wixel/gump: ^2.0 || ^1.12
README
验证库
这是一个独立的PHP数据验证和过滤类,它使得验证任何数据变得简单且易于操作,无需依赖框架。GUMP自2013年起为开源。
使用composer安装
composer require nguyenanhung/validation
验证的短格式示例
use nguyenanhung\Validation\Validation; $is_valid = Validation::is_valid(array_merge($_POST, $_FILES), [ 'username' => 'required|alpha_numeric', 'password' => 'required|between_len,4;100', 'avatar' => 'required_file|extension,png;jpg', 'tags' => 'required|alpha_numeric', // ['value1', 'value3'] 'person.name' => 'required', // ['person' => ['name' => 'value']] 'persons.*.age' => 'required' // ['persons' => [ // ['name' => 'value1', 'age' => 20], // ['name' => 'value2'] // ]] ]); // 1st array is rules definition, 2nd is field-rule specific error messages (optional) $is_valid = Validation::is_valid(array_merge($_POST, $_FILES), [ 'username' => ['required', 'alpha_numeric'], 'password' => ['required', 'between_len' => [6, 100]], 'avatar' => ['required_file', 'extension' => ['png', 'jpg']] ], [ 'username' => ['required' => 'Fill the Username field please.'], 'password' => ['between_len' => '{field} must be between {param[0]} and {param[1]} characters.'], 'avatar' => ['extension' => 'Valid extensions for avatar are: {param}'] // "png, jpg" ]); if ($is_valid === true) { // continue } else { var_dump($is_valid); // array of error messages }
过滤的短格式示例
use nguyenanhung\Validation\Validation; $filtered = Validation::filter_input([ 'field' => ' text ', 'other_field' => 'Cool Title' ], [ 'field' => ['trim', 'upper_case'], 'other_field' => 'slug' ]); var_dump($filtered['field']); // result: "TEXT" var_dump($filtered['other_field']); // result: "cool-title"
长格式示例
use nguyenanhung\Validation\Validation; $validation = new Validation(); // set validation rules $validation->validation_rules([ 'username' => 'required|alpha_numeric|max_len,100|min_len,6', 'password' => 'required|max_len,100|min_len,6', 'email' => 'required|valid_email', 'gender' => 'required|exact_len,1|contains,m;f', 'credit_card' => 'required|valid_cc' ]); // set field-rule specific error messages $validation->set_fields_error_messages([ 'username' => ['required' => 'Fill the Username field please, its required.'], 'credit_card' => ['extension' => 'Please enter a valid credit card.'] ]); // set filter rules $validation->filter_rules([ 'username' => 'trim|sanitize_string', 'password' => 'trim', 'email' => 'trim|sanitize_email', 'gender' => 'trim', 'bio' => 'noise_words' ]); // on success: returns array with same input structure, but after filters have run // on error: returns false $valid_data = $validation->run($_POST); if ($validation->errors()) { var_dump($validation->get_readable_errors()); // ['Field <span class="gump-field">Somefield</span> is required.'] // or var_dump($validation->get_errors_array()); // ['field' => 'Field Somefield is required'] } else { var_dump($valid_data); }
⭐ 可用验证器
重要:如果您使用管道符或分号作为参数值,您必须使用数组格式。
use nguyenanhung\Validation\Validation; $is_valid = Validation::is_valid(array_merge($_POST, $_FILES), [ 'field' => 'regex,/partOf;my|Regex/', // NO 'field' => ['regex' => '/partOf;my|Regex/'] // YES ]);
⭐ 可用过滤器
过滤器规则也可以是任何PHP原生函数(例如:trim)。
其他可用方法
use nguyenanhung\Validation\Validation; /** * This is the most flexible validation "executer" because of it's return errors format. * * Returns bool true when no errors. * Returns array of errors with detailed info. which you can then use with your own helpers. * (field name, input value, rule that failed and it's parameters). */ $validation->validate(array $input, array $ruleset); /** * Filters input data according to the provided filterset * * Returns array with same input structure but after filters have been applied. */ $validation->filter(array $input, array $filterset); // Sanitizes data and converts strings to UTF-8 (if available), optionally according to the provided field whitelist $validation->sanitize(array $input, $whitelist = null); // Override field names in error messages Validation::set_field_name('str', 'Street'); Validation::set_field_names([ 'str' => 'Street', 'zip' => 'ZIP Code' ]); // Set custom error messages for rules. Validation::set_error_message('required', '{field} is required.'); Validation::set_error_messages([ 'required' => '{field} is required.', 'valid_email' => '{field} must be a valid email.' ]); // Strips and encodes unwanted characters Validation::xss_clean(array $data);
创建自己的验证器和过滤器
通过使用回调函数,添加自定义验证器和过滤器变得简单。
use nguyenanhung\Validation\Validation; /** * You would call it like 'equals_string,someString' * * @param string $field Field name * @param array $input Whole input data * @param array $params Rule parameters. This is usually empty array by default if rule does not have parameters. * @param mixed $value Value. * In case of an array ['value1', 'value2'] would return one single value. * If you want to get the array itself use $input[$field]. * * @return bool true or false whether the validation was successful or not */ Validation::add_validator("equals_string", function($field, array $input, array $params, $value) { return $value === $params; }, 'Field {field} does not equal to {param}.'); /** * @param string $value Value * @param array $param Filter parameters (optional) * * @return mixed result of filtered value */ Validation::add_filter("upper", function($value, array $params = []) { return strtoupper($value); });
或者,您可以简单地创建一个扩展Validation的自己的类。您只需要记住
- 对于过滤器方法,在方法名前添加 "filter_"。
- 对于验证器方法,在方法名前添加 "validate_"。
use nguyenanhung\Validation\Validation; class MyClass extends Validation { protected function filter_myfilter($value, array $params = []) { return strtoupper($value); } protected function validate_myvalidator($field, array $input, array $params = [], $value) { return $input[$field] === 'good_value'; } } $validator = new MyClass(); $validated = $validator->validate($_POST, $rules);
全局配置
此配置值允许您更改默认规则分隔符(例如:required|contains,value1;value2
到 required|contains:value1,value2
)。
use nguyenanhung\Validation\Validation; Validation::$rules_delimiter = '|'; Validation::$rules_parameters_delimiter = ','; Validation::$rules_parameters_arrays_delimiter = ';';
联系 & 支持
如果您有任何疑问和请求,请联系以下信息
来自越南,带着爱与关怀 <3