jetfirephp / validator
JetFire - 验证器
Requires
- php: >=5.4.0
This package is not auto-updated.
Last update: 2024-09-14 17:48:28 UTC
README
A simple php validator inspired by laravel form request validation and Respect/Validation.
安装
通过 composer
composer require jetfirephp/validator
使用
简单使用 \JetFire\Validator\Validator
require_once __DIR__ . '/vendor/autoload.php'; $response = \JetFire\Validator\Validator::isAlpha('Peter Parker'); // if not valid if(!$response){ // your code // ... }
如果您要验证多个值,可以这样操作
require_once __DIR__ . '/vendor/autoload.php'; $response = \JetFire\Validator\Validator::validate([ 'Peter Parker 1' => 'alpha|length:<60', '20' => 'int|max:40|min:10', 'peter.parker@spiderman.com' => 'email|noWhitespace', '+347123456789' => 'phone', '11375' => 'postalCode:US' ]); if($response['valid']){ // Continue your code // ... }else{ // $response['message'] return an array of messages for each value and rule // $response['message']['_field_']['_rule_'] // for example the first validation will return an error because 'Petet Parker 1' doesn't contains only letters // to get the return message : $response['message']['Peter Parker 1']['alpha'] }
如你所见,将值作为错误消息的键并不是很方便。如果您想为您的值添加键,您必须在值之前添加您的键,如下所示
$response = \JetFire\Validator\Validator::validate([ 'name::Peter Parker 1' => 'alpha|length:<60', 'age::20' => 'int|max:40|min:10', 'email::peter.parker@spiderman.com' => 'email|noWhitespace', 'phone::+347123456789' => 'phone', 'code::11375' => 'postalCode:US' ]); // You can get now the error message for 'Peter Parker 1' like this $response['message']['name']['alpha']
$_POST & $_GET 验证
对于 $_POST
验证,您必须像这样指定输入名称
$response = \JetFire\Validator\Validator::validatePost([ 'firstName|lastName' => 'alpha|length:<60', 'age' => 'int|max:40|min:10', 'email' => 'email|noWhitespace', 'phone' => 'phone', 'postal_code' => 'postalCode:US' ]);
对于 $_GET
验证,您必须使用 \JetFire\Validator\Validator::validateGet
。
自定义消息
您可以为验证设置自定义消息。您必须在 \JetFire\Validator\Validator::validate
的第二个参数中传递一个数组
$response = \JetFire\Validator\Validator::validatePost([ 'firstName|lastName' => 'alpha|length:<60', ],[ 'alpha:firstName' => 'FirstName must contains only letters', // only applied for firstName not for lastName 'length' => ':field must not exceed 60 characters', // :field is replaced by field name (firstName or lastName) ]);
自定义规则
您可以像这样为验证创建自己的规则
\JetFire\Validator\Validator::addRule('maximum', function($request,$param,$parameters = null){ return (!empty($parameters['maximum']) && (int)$request[$param] <= (int)$parameters['maximum']) ? true : '"' . $param . '" must be lower than "'.$parameters['maximum'].'"'; }); $response = JetFire\Validator\Validator::validate([ 'number::20' => 'maximum:30' ]);
$request
包含所有输入值(您可以通过 $request[$param] 获取当前输入值)
$param
是输入名称
$parameters
包含冒号后面的字符串
或者,您可以在数组中定义您的规则,并将其传递给 \JetFire\Validator\Validator::addRules()
$rules = [ 'maximum' => function($request,$param,$parameters = null){ return (!empty($parameters['maximum']) && (int)$request[$param] <= (int)$parameters['maximum']) ? true : '"' . $param . '" must be lower than "'.$parameters['maximum'].'"'; }, 'minimum' => function($request,$param,$parameters = null){ return (!empty($parameters['min']) && (int)self::$request[$param] <= (int)$parameters['min']) ? true : '"' . $param . '" must be higher than "'.$parameters['min'].'"'; }, ]; \JetFire\Validator\Validator::addRules($rules);
可用规则
以下是可用规则的列表
regex
对输入进行正则表达式评估并验证是否匹配
'Peter Parker' => 'regex:/[a-zA-Z]/', // true
alpha
验证 a-Z 的字符
'Peter Parker' => 'alpha', // true 'Peter - Parker' => 'alpha', // false
alnum
验证 a-Z 和 0-9 的字母数字字符
'Peter Parker 20' => 'alnum', // true 'Peter Parker - 20' => 'alnum', // false
string
验证输入是否为字符串。
// for $_POST and $_GET validation // type string 'firstName' => 'string', // true
int
验证输入是否为整数。
// for $_POST and $_GET validation // type int 'age' => 'int', // true
numeric
验证任何数值。
'20' => 'numeric', // true '-20' => 'numeric', // true '2.0' => 'numeric', // true
max & min
验证输入值是否不超过最大值或是否大于最小值。
'20' => 'max:30|min:10', // true '-20' => 'max:1|min:-30', // true
url
验证输入是否为 URL。
'http://example.com' => 'url', // true 'https://www.youtube.com/watch?v=6FOUqQt3Kg0' => 'url', // true
boolean
验证输入是否为布尔值。
'1' => 'boolean', // true 'true' => 'boolean', // true
date
验证输入是否为日期。
'20-01-2016' => 'date:d-m-y', // true '2016-01-20' => 'date:y-m-d', // true
lowercase
验证输入中的字符串字符是否为小写。
'peter parker 20' => 'lowercase', // true
uppercase
验证输入中的字符串字符是否为大写。
'PETER PARKER' => 'uppercase', // true
noWhitespace
验证字符串是否不包含空白(空格、制表符和换行符);
'Peter Parker' => 'noWhitespace', // false 'Peter-Parker' => 'noWhitespace', // true
验证电子邮件地址。
'peter.parker@spiderman.com' => 'email', // true
phone
验证有效的 7 位、10 位或 11 位电话号码(北美、欧洲以及大多数亚洲和中东国家的电话号码),支持国家和区域代码(以点、空格或破折号表示),例如
'(555)555-5555' => 'phone', // true // other phone numbers accepted (555)555-5555 555 555 5555 +5(555)555.5555 33(1)22 22 22 22 +33(1)22 22 22 22 +33(020)7777 7777 03-6106666
postalCode
根据给定的国家代码验证邮政编码。
'75000' => 'postalCode:FR', // true '02179000' => 'postalCode:BR', // true '02179-000' => 'postalCode:BR', // true '02179-000' => 'postalCode:US', // false '55372' => 'postalCode:US', // true
equal
验证输入是否等于某个值。
'Peter Parker' => 'equal:Peter Parker', // true // you can pass php function to check a value like this : 'password' => 'equal:password_verify,your_password', 'password' => 'equal:md5,your_password',
values
验证输入是否包含以下值之一。
'Peter' => 'values:Peter,Parker,Spiderman', // true 'Peter' => 'values:Parker,Spiderman', // false
same
验证输入是否等于另一个输入。
// for $_POST and $_GET validation // firstName = Peter 'firstName' => 'alpha', // true // lastName = Peter 'lastName' => 'same:firstName', // true
length
验证长度。
'Peter' => 'length:5', // true 'Peter' => 'length:>4', // true 'Peter' => 'length:<6', // true 'Peter' => 'length:4,5', // true
image
通过检查其 MIME 类型验证文件是否为有效的图像。
'image.jpg' => 'image', // true // other supported MIME ['png', 'jpeg', 'gif', 'svg', 'bmp']
上述所有验证都必须返回 false,如果输入不是有效的文件或 MIME 类型与文件扩展名不匹配。
mimes
验证文件扩展名是否与预期的匹配
'image.jpg' => 'mimes:jpg', // true
size
验证文件大小
// size in octet 'image.jpg' => 'size:10000', // true 'image.jpg' => 'size:<10000', // true 'image.jpg' => 'size:>10000', // true 'image.jpg' => 'size:10000,20000', // true
height & width
验证图像高度或宽度
// height and width in px 'image.jpg' => 'height:200|width:200', // true 'image.jpg' => 'height:<200|width:<200', // true 'image.jpg' => 'height:>200|width:>200', // true 'image.jpg' => 'height:200,300|width:200,300', // true
set
验证输入是否已设置。
// for $_POST & $_GET 'firstName' => 'set', // true // php : if(isset($_POST['firstName'])) or if(isset($_GET['firstName']))
required
检查输入是否已设置且不为空
// for $_POST & $_GET 'firstName' => 'required', // true
requiredIf
如果字段满足某些条件,则该字段为必填。
// for $_POST & $_GET 'firstName' => 'required', // true // lastName is required if value1 is equal to value2 'lastName' => 'requiredIf:value1,value2', // lastName is required if firstName is set and not empty 'lastName => 'requiredIf:field,firstName', // lastName is required if firstName is set and empty 'lastName' => 'requiredIf:empty_field,firstName', // lastName is required if firstName is set 'lastName' => 'requiredIf:field_set,firstName', // lastName is required if firstName is not set 'lastName' => 'requiredIf:field_not_set,firstName', // lastName is required if firstName value is equal to Peter 'lastName' => 'requiredIf:field_value,firstName,Peter', // lastName is required if firstName value is not equal to Peter 'lastName' => 'requiredIf:field_value_not,firstName,Peter',
requiredWith
输入为必填,需要与其它输入一起填写。
'firstName1::Peter|lastName1::Parker' => '', 'firstName2::|lastName2::Parker' => '', // age is required with firstName and lastName 'age1::20' => 'requiredWith:firstName1,lastName1', // true 'age2::20' => 'requiredWith:firstName2,lastName2', // false firstName1 is empty 'age3::' => 'requiredWith:firstName1,lastName1', // false age is empty
requiredOneOf
输入为必填,需与以下任一输入一起填写。
'firstName1::Peter|lastName1::Parker' => '', 'firstName2::Peter|lastName2::' => '', 'firstName3::|lastName3::' => '', // age is required with one of the following inputs 'age1::20' => 'requiredOneOf:firstName1,lastName1', // true 'age2::20' => 'requiredOneOf:firstName2,lastName2', // true 'age3::20' => 'requiredOneOf:firstName3,lastName3', // false firstName3 or lastName3 must not be empty 'age4::' => 'requiredOneOf:firstName1,lastName1', // false age is required
with
输入为可选,但以下输入不得为空。
'firstName1::Peter|lastName1::Parker' => '', 'firstName2::Peter|lastName2::' => '', // age is optional but the followings input must not be empty 'age1::20' => 'with:firstName1,lastName1', // true 'age1::' => 'with:firstName1,lastName1', // true 'age2::20' => 'with:firstName2,lastName2', // false
oneOf
输入为可选,但以下任一输入不得为空。
'firstName1::Peter|lastName1::Parker' => '', 'firstName2::|lastName2::' => '', // age is optional but one of the following input must not be empty 'age1::20' => 'with:firstName1,lastName1', // true 'age1::' => 'with:firstName1,lastName1', // true 'age2::20' => 'with:firstName2,lastName2', // false
optional
输入为可选,如果输入为空,则不执行以下规则。
'firstName::' => 'optional|alpha|length:<20', // true 'firstName::Peter' => 'optional|alpha|length:<20', // true 'firstName::Peter 2' => 'optional|alpha|length:<20', // false
optionalIf
如果满足某些条件,则输入为可选。
'firstName::Peter' => '', // lastName is optional if value1 is equal to value2 'lastName' => 'optionalIf:value1,value2', // lastName is optional if firstName is set and not empty 'lastName => 'optionalIf:field,firstName', // lastName is optional if firstName is set and empty 'lastName' => 'optionalIf:empty_field,firstName', // lastName is optional if firstName is set 'lastName' => 'optionalIf:field_set,firstName', // lastName is optional if firstName is not set 'lastName' => 'optionalIf:field_not_set,firstName', // lastName is optional if firstName value is equal to Peter 'lastName' => 'optionalIf:field_value,firstName,Peter', // lastName is optional if firstName value is not equal to Peter 'lastName' => 'optionalIf:field_value_not,firstName,Peter',
skipIf
如果满足某些条件,则跳过输入规则。
'firstName::Peter' => '', // skip lastName if value1 is equal to value2 'lastName' => 'skipIf:value1,value2', // skip lastName if firstName is set and not empty 'lastName => 'skipIf:field,firstName', // skip lastName if firstName is set and empty 'lastName' => 'skipIf:empty_field,firstName', // skip lastName if firstName is set 'lastName' => 'skipIf:field_set,firstName', // skip lastName if firstName is not set 'lastName' => 'skipIf:field_not_set,firstName', // skip lastName if firstName value is equal to Peter 'lastName' => 'skipIf:field_value,firstName,Peter', // skip lastName if firstName value is not equal to Peter 'lastName' => 'skipIf:field_value_not,firstName,Peter',
赋值
add
'name1::Peter' => 'add:end,Parker', // name1 = Peter Parker 'name2::Parker' => 'add:begin,Peter', // name2 = Peter Parker
assign
// you can modify your input value with a crypt function 'password::Peter' => 'assign:crypt,password_hash', // password = password_hash('Peter', PASSWORD_BCRYPT); // you can use other crypt function like md5, sha5 .. // change your input value 'name::Parker' => 'assign:Peter', // name = Peter // or 'name::Parker' => 'assign:value,Peter', // name = Peter // change your input value with another input value 'firstName::Peter' => '', 'lastName::Parker' => 'assign:field,firstName', // lastName = Peter // assign the file name to file input 'file' => 'assign:file' // assign this input value to another input 'firstName::Peter' => '', 'lastName::Parker' => 'assign:this,firstName', // firstName = Parker
许可证
JetFire Validator 以 MIT 公共许可证发布:https://open-source.org.cn/licenses/MIT。