project-melody / validator
验证规则集
v1.1.3
2015-02-17 23:08 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- phpunit/phpunit: @stable
This package is not auto-updated.
Last update: 2024-09-20 01:41:54 UTC
README
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
只接受有效的电子邮件
$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!"