apolinux/validator

简单的表单验证器

v0.6 2024-07-31 14:52 UTC

This package is auto-updated.

Last update: 2024-10-01 00:20:41 UTC


README

根据定义或自定义规则从数组或对象中验证输入字段。

这些规则包括:定义、PHP函数、is_array、is_object、min、max、regex、闭包、静态方法。

规则可以通过'|'字符或使用数组列表连接,例如:'rule1|rule2|rule3 ...' 或 ['rule1', 'rule2', 'rule3',...]。

示例

  <?php
  
  $rules = [
   'name'      => 'is_alnum' , // php function
   'address'   => 'defined' , // internal validator
   'user'      => [ 'regex' => '/\w+/' , 'is_int' => null , ...] ,//rules defined in array
   'phone'     => ['method' => '\namespace\subnamespace\Classname::validationMethod' ..]
   'fieldname5'=> 'defined|is_int|min:3|max:20', // several rules in one line separated by '|'
   ...
  ]

  $validator = new Apolinux\Validator ;
  if( ! $validator->validate($rules) ){
    throw new \Exception('There is an error with input:' . $validator->getLastError()) ;
  }

规则

规则列表

  • defined : 验证字段是否定义
  • min : 验证数字是否大于最小值或数组元素是否多于最小值
  • max : 验证数字是否小于最大值或数组元素是否少于最大值
  • minlength : 验证字符长度是否大于值
  • maxlength : 验证字符长度是否少于值
  • range : 验证字段是否在浮点数范围内
  • is_int : 验证数字是否为整数
  • is_array : 验证字段是否为数组
  • is_object : 验证字段是否为对象
  • is_scalar : 使用is_scalar PHP函数验证数字是否为标量
  • regex : 验证字段是否匹配正则表达式。必须包含括号如'/'
  • method : 使用静态方法进行验证。方法必须返回布尔值

静态方法

静态方法定义如下

$rules = [
  'field_name' => ['method' => 'Apolinux\CustomNamespace\ValidatorField::validate', ...]
]

静态方法必须接受三个参数

  • 输入数据数组
  • 字段值
  • 验证失败时显示的文本消息。必须通过引用传递

如果验证通过,则返回true。

除了上述定义的函数外,还可以使用函数和可调用对象进行验证

可调用对象

使用匿名函数进行验证。与静态方法定义类似,该函数必须接受三个参数

  • 输入数据数组
  • 字段值
  • 验证失败时显示的文本消息。必须通过引用传递

如果验证通过,则返回true。

示例

$rules = [
  'name' => function($input, $value, &$message){
    //validate data 
    if(validation_failed){
      return false ;
    }
    // no error in validation
    return true ;
  },
  ...
] ;

function : 使用现有函数进行验证

$rules = [
  'field_name1' => 'is_double' ,  // PHP function 
  'field_name2' => 'user_defined_function', // custom function
  ...
] ;

验证全部

默认情况下,验证器在第一个错误时停止。如果需要显示所有错误,请以第二个参数为false运行validate()方法

$validator->validate($rules, false) ;

要获取所有错误,请调用getErrors()方法。

待办事项

  • 添加多语言支持
  • 添加更多规则:等于长度、is_json、is_xml、is_email、is_url等
  • 按字段累积错误

变更

添加版本0.5