project-melody/validator

v1.1.3 2015-02-17 23:08 UTC

This package is not auto-updated.

Last update: 2024-09-20 01:41:54 UTC


README

Build Status Stories in Ready

Melody Validator 是一套易于自定义验证组的验证规则。它支持 PHP 5.3.3 或更高版本。

  • 您可以使用链式验证,例如:v::email()->noWhitespace()->length(5,20)->validate("valid@email.com");
  • 您可以为自定义消息设置
  • 您可以通过智能方式按需重用规则
  • 您可以从 YML 和 PHP 文件中加载验证组
  • PSR-0 自动加载是兼容的。

安装

推荐安装 Melody Validator 的方法是 通过 composer。只需创建一个 composer.json 文件,然后运行 php composer.phar install 命令即可安装

{
    "require": {
        "project-melody/validator": "dev-master"
    }
}

简介

导入 Validator 命名空间

use Melody\Validation\Validator as v;

基本用法

链式验证

$password = "pass@2012";
v::length(6, 12) // Length between 6 and 12 characters
    ->containsSpecial(1) // at least 1 special character
    ->containsLetter(3) // at least 3 letters
    ->containsDigit(2) // at least 2 digits
    ->validate($password); // true

获取违规消息

$email = "test@mail.com";

$emailValidator = v::email();
$emailValidator->validate($email); //true

$violations = $emailValidator->getViolations(); //List all violation messages

约束重用

$username = "valid@username.com";
$validEmail = v::email();

//Reusing $validEmail constraint
$validUsername = $validEmail->add(v::maxLength(15)->minLength(5));
$validUsername->validate($username);//true

规则

Alnum

只接受字母数字字符串

$alnumValidator = v::alnum();
$alnumValidator->validate("valid"); //true
$alnumValidator->validate("#invalid"); //false

Boolean

只接受布尔值

$booleanValidator = v::boolean();
$booleanValidator->validate(true); //true
$booleanValidator->validate(false); //true
$booleanValidator->validate("not a boolean"); //false

ContainsDigit (整数 $minimum)

输入字符串中数字(0-9)的最小出现次数

$containsDigitValidator = v::containsDigit(3); // Minimum 3 digits
$containsDigitValidator->validate(123); //true
$containsDigitValidator->validate("12a"); //false

ContainsLetter (整数 $minimum)

输入字符串中字母(a-z 或 A-Z)的最小出现次数

$containsLetterValidator = v::containsLetter(1); // Minimum 1 letter
$containsLetterValidator->validate("123a"); //true
$containsLetterValidator->validate("1234"); //false

ContainsSpecial (整数 $minimum)

输入字符串中特殊字符的最小出现次数

$containsSpecialValidator = v::containsSpecial(1); // Minimum 1 special character
$containsSpecialValidator->validate("123@"); //true
$containsSpecialValidator->validate("1234"); //false

Email

只接受有效的电子邮件

$emailValidator = v::email();
$emailValidator->validate("valid@email.com"); //true
$emailValidator->validate("invalid#@email.com"); //false

Int

断言输入是整数

$intValidator = v::int();
$intValidator->validate(1234); //true
$intValidator->validate("@"); //false

IsArray

断言输入是数组

$isArrayValidator = v::isArray();
$isArrayValidator->validate(array()); //true
$isArrayValidator->validate(new \ArrayObject()); //true
$isArrayValidator->validate("not a array"); //false

KeyExists

断言键存在于数组中

$keyExistsValidator = v::keyExists("name");
$keyExistsValidator->validate(array("name" => "John Doe")); //true
$keyExistsValidator->validate(array("age" => 25)); //false
$keyExistsValidator->validate(array()); //false

Length (整数 $minLength, 整数 $maxLength)

确保字符串的长度介于最小值和最大值之间

$lengthValidator = v::length(5, 10);
$lengthValidator->validate("Valid"); //true
$lengthValidator->validate("Invalid string"); //false

Max (整数 $input)

需要指定的最大数字

$maxValidator = v::max(10);
$maxValidator->validate(10); //true
$maxValidator->validate(11); //false

Min (整数 $min)

需要指定的最小数字

$minValidator = v::min(10);
$minValidator->validate(10); //true
$minValidator->validate(9); //false

MaxLength (整数 $max)

验证字符串是否具有指定的最大长度

$maxLengthValidator = v::maxLength(8);
$maxLengthValidator->validate("12345678"); //true
$maxLengthValidator->validate("123456789"); //false

MinLength (整数 $min)

验证字符串是否具有指定的最小长度

$minLengthValidator = v::minLength(9);
$minLengthValidator->validate("123456789"); //true
$minLengthValidator->validate("12345678"); //false

NotEmpty ()

验证输入是否不为空

$notEmptyValidator = v::notEmpty();
$notEmptyValidator->validate("    "); //false
$notEmptyValidator->validate(null); //false
$notEmptyValidator->validate(new \stdClass); //true
$notEmptyValidator->validate("a   "); //true

NoWhitespace ()

验证字符串是否不包含空白字符

$noWhitespaceValidator = v::noWhitespace();
$noWhitespaceValidator->validate("validstring"); //true
$noWhitespaceValidator->validate("invalid string"); //false

Number ()

验证输入是否为数字

$numberValidator = v::number();
$numberValidator->validate(1234); //true
$numberValidator->validate("not numeric"); //false

Range (整数 $min, 整数 $max)

验证数字是否介于指定的最小值和最大值之间

$rangeValidator = v::range(5, 10);
$rangeValidator->validate(7); //true
$rangeValidator->validate(4); //false

String ()

验证输入是否为字符串

$stringValidator = v::string();
$stringValidator->validate("a generic string"); //true
$stringValidator->validate(1234); //false

分组验证

这是我们用作测试验证组的参考输入

use Melody\Validation\Validator as v;
use Melody\Validation\ValidationGroups\ValidationGroupsFactory;

$input['name'] = "Marcelo Santos";
$input['email'] = "email@gmail.com";
$input['username'] = "marcelsud";
$input['password'] = "pass@2013";

从数组加载

use Melody\Validation\ValidationGroups\Parser\ArrayParser;

$config['registering'] = array(
        'name' => v::maxLength(50),
        'email' => v::email()->maxLength(50),
        'username' => v::length(6, 12)->alnum()->noWhitespace(),
        'password' => v::length(6, 12)->containsSpecial(1)->containsLetter(3)->containsDigit(2)->noWhitespace()
);

$validationGroups = ValidationGroupsFactory::build(new ArrayParser($config));
$validationGroups->validate($input, "registering"); // true

从 YAML 文件加载

# /path/to/validation.yml
registering:
    name: "maxLength:50"
    email: "email|maxLength:50"
    username: "length:6:12|alnum|noWhitespace"
    password : "length:6:12|containsSpecial:1|containsLetter:3|containsDigit:2|noWhitespace"

验证

use Melody\Validation\ValidationGroups\Parser\YamlParser;

$validationGroups = ValidationGroupsFactory::build(new YamlParser("/path/to/validation.yml"));
$validationGroups->validate($input, "registering"); // true

从 PHP 文件加载

// /path/to/validation.php
use Melody\Validation\Validator as v;

$config['registering'] = array(
    'name' => v::maxLength(50),
    'email' => v::email()->maxLength(50),
    'username' => v::length(6, 12)->alnum()->noWhitespace(),
    'password' => v::length(6, 12)->containsSpecial(1)->containsLetter(3)->containsDigit(2)->noWhitespace()
);

return $config;

验证

use Melody\Validation\ValidationGroups\Parser\PHPParser;

$validationGroups = ValidationGroupsFactory::build(new PHPParser("/path/to/validation.php"));
$validationGroups->validate($input, "registering"); // true

创建您自己的验证组

use Melody\Validation\Common\Collections\ConstraintsCollection;
use Melody\Validation\ValidationGroups\ValidationGroups;

$constraintsCollection = new ConstraintsCollection();
$constraintsCollection->set('name', v::maxLength(50));
$constraintsCollection->set('email', v::email()->maxLength(50));

$validationGroups = new ValidationGroups();
$validationGroups->add("updating", $constraintsCollection);

$validationGroups->validate($input, "updating"); // true

$validationGroups->has("updating"); // true
$validationGroups->remove("updating");
$validationGroups->has("registering"); // false

添加自定义违规消息

$config['registering']['email'] = v::email()->maxLength(50);

$validationGroups = ValidationGroupsFactory::build(new ArrayParser($config));
$input['email'] = "email @gmail.com";

$validationGroups->validate($input, "registering", array(
        'email' => "'{{input}}' must be a valid email!"
));

$errors = $validationGroups->getViolations(); // Lists all the violation messages
var_dump($errors['email']); // string(45) "'email @gmail.com' must be a valid email!"