horizom/validation

一个快速、可扩展且独立的PHP输入验证类,允许您验证任何数据。

3.1.0 2022-07-10 03:12 UTC

This package is auto-updated.

Last update: 2024-09-29 05:57:10 UTC


README

Latest Stable Version Total Downloads License

Horizom Validation

GUMP 拉取,Horizom Validation 是一个独立的PHP数据验证和过滤类,使验证任何数据变得简单而痛苦,无需依赖于框架。Horizom Validation 是开源的。

使用 composer 安装

composer require horizom/validation

验证的简短格式示例

$is_valid = Horizom\Validation::isValid(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 = Horizom\Validation::isValid(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
}

过滤的简短格式示例

$filtered = Horizom\Validation::filterInput([
    '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"

长格式示例

$validation = new Horizom\Validation();

// set validation rules
$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->messages([
    'username'      => ['required' => 'Fill the Username field please, its required.'],
    'credit_card'   => ['extension' => 'Please enter a valid credit card.']
]);

// set filter rules
$validation->filters([
    '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
$validData = $validation->run($_POST);

if ($validation->errors()) {
    var_dump($validation->getReadableErrors()); // ['Field <span class="form-field">Somefield</span> is required.'] 
    // or
    var_dump($validation->getErrors()); // ['field' => 'Field Somefield is required']
} else {
    var_dump($validData);
}

⭐ 可用验证器

重要:如果您使用管道或分号作为参数值,您必须使用数组格式。

$is_valid = Horizom\Validation::isValid(array_merge($_POST, $_FILES), [
    'field' => 'regex,/partOf;my|Regex/', // NO
    'field' => ['regex' => '/partOf;my|Regex/'] // YES
]);

⭐ 可用过滤器

过滤规则也可以是任何PHP原生函数(例如:trim)。

其他可用方法

/**
 * 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
Horizom\Validation::setFieldName('str', 'Street');
Horizom\Validation::setFieldNames([
    'str' => 'Street',
    'zip' => 'ZIP Code'
]);

// Set custom error messages for rules.
Horizom\Validation::setErrorMessage('required', '{field} is required.');
Horizom\Validation::setErrorMessages([
    'required'    => '{field} is required.',
    'valid_email' => '{field} must be a valid email.'
]);

// Strips and encodes unwanted characters
Horizom\Validation::xssClean(array $data);

创建自己的验证器和过滤器

通过使用回调函数,添加自定义验证器和过滤器变得容易。

/**
 * 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
 */
Horizom\Validation::addValidator("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
 */
Horizom\Validation::addFilter("upper", function($value, array $params = []) {
    return strtoupper($value);
});

或者,您可以直接创建一个继承自 Horizom\Validation 的类。您只需记住

  • 对于过滤方法,在方法名称前加上 "filter_"。
  • 对于验证器方法,在方法名称前加上 "validate_"。
class MyClass extends Horizom\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;value2required|contains:value1,value2)。

Horizom\Validation::$rules_delimiter = '|';

Horizom\Validation::$rules_parameters_delimiter = ',';

Horizom\Validation::$rules_parameters_arrays_delimiter = ';';