azi/validator

此包已被废弃且不再维护。作者建议使用 azi/envalid 包。

服务器端用户输入验证库

2.0 2015-08-16 18:14 UTC

This package is auto-updated.

Last update: 2022-02-01 12:45:52 UTC


README

PHP 服务器端表单验证

Build Status Codacy Badge Latest Stable Version Total Downloads Latest Unstable Version License Join the chat at https://gitter.im/azeemhassni/validator

这是一个小型 PHP 包,用于简化在项目中验证表单,尤其是大型表单。

安装指南

您可以通过 GitHub 下载包或使用 composer 安装 Validator。我鼓励您使用后者。

{ 
  "require": {
    "azi/validator": "2.*"
  }
} 

## 开始使用

  • require composer autoloader
require 'vendor/autoload.php';
  • 实例化 Validator 类
use azi\Validator;
$v = new Validator();
  • 为每个表单字段定义规则
  $rules = array(
        'name' => 'alpha|required',
        'age'  => 'num|required',
    );
  • 运行 validator
$v->validate( $_POST, $rules );
  • 检查 validator 是否有错误,如果验证失败则将用户重定向回表单
if ( !$v->passed() ) {
        $v->goBackWithErrors();
    }
  • 向用户显示验证错误
 <label>Name :
      <input type="text" name="name">
 </label>
 <?=  Validator::error('name'); ?>

您可以使用自定义 HTML 标记包裹错误消息

  Validator::error('confirm_password', '<span class="error">:message</span>');

规则

  • required
  • num
  • alpha
  • alnum
  • email
  • ip
  • url
  • min:number
  • max:number
  • same:field_name

自定义表达式和消息

  • 自定义表达式

您可以在运行 validator 之前注册自定义 RegExp

$v->registerExpression( 'cnic', '#^([0-9]{13})$#', 'Invalid CNIC number' );

registerExpression 方法需要三个参数

  • expressionID - 表达式的唯一名称
  • pattern - RegExp 字符串
  • message [可选] - 如果验证失败则返回的错误消息
Validator::registerExpression($expressionID , $pattern, $message)
  • 自定义消息

您还可以为每个规则传递自定义错误消息

 $rules['full_name'] = "required--Please Enter your name";

注册自定义规则

这个周末(2015年8月15日)我正在为 validator 开发一个必备功能,即运行时接受自定义规则。以下是您现在如何做到这一点的方法。

$validator = new azi\validator();
$validator->addRule('isUnique', function($field, $value){
    $query = mysqli_query("SELECT * FROM users WHERE username = $value");
    if($query->affected_rows > 0) {
        return "Username '$value' already exists please try something else";
    }
    
    return true;
);

现在您可以使用这个新注册的规则了。

$validator->validate(
    $_POST, ['username' => 'isUnique|required']
);

现在您对字段验证有了如此大的控制权,可以在您传递给 Validator::addRule() 的第二个参数的闭包中做任何想做的事情。

条件规则

您可以为字段指定条件规则

 $rules['age'] = 'if:gender[Male](required|min:2|num)';

比较规则

您还可以比较一个字段与另一个字段

  $rules['password'] = 'required|min:8';
  $rules['confirm_password'] = 'same:password';