1. 表单验证
1.1. 基本用法
基本验证例子
B2B2C通过validator
类让您可以简单、方便的验证数据正确性及查看相应的验证错误信息。
$validator = validator::make(
array('name' => 'Dayle'),
array('name' => 'required|min:5'),
array('name' => '自定义错误')
);
上文中通过 make 这个方法来的第一个参数来设定所需要被验证的数据名称,第二个参数设定该数据可被接受的规则。
使用数组来定义规则
多个验证规则可以使用"|"符号分隔,或是单一数组作为单独的元素分隔。 多个自定义错误使用"|"符号分隔,或是单一数组作为单独的元素分隔。
$validator = validator::make(
array('name' => 'Dayle'),
array('name' => array('required', 'min:5')),
array('name' => '自定义错误')
);
验证多个字段
$validator = validator::make(
array(
'name' => 'Dayle',
'password' => 'lamepassword',
'email' => 'email@example.com'
),
array(
'name' => 'required',
'password' => 'required|min:8',
'email' => 'required|email'
)
array(
'name' => '自定义错误',
'password' => '密码不能为空|密码最短长度为8位',
'email' => '邮箱必填|邮箱格式不正确'
)
);
密码验证实例
$validator = validator::make(
['password' => '12354744' ,'password_confirmation'=>'12354744'],
['password' => 'min:6|max:10|confirmed'],
['password' => '密码长度不能小于6位!|密码长度不能大于20位|密码必须一致!']
);
//错误方式1
if ($validator->fails())
{
$messages = $validator->messagesInfo();
foreach( $messages as $error )
{
throw new LogicException( $error[0] );
}
}
错误方式2 直接调用
$validator->newFails();//必须用 try catch捕获错误信息
1.1.1. 验证一个值小于另一个值
$validator = validator::make(
[$data['buy_limit'] ,$data['discount_max']],
['min:1','max:'.$data['discount_min']],
['用户限购数量要大于0!','折扣范围必须由小到大!']
);
//错误方式1
if ($validator->fails())
{
$messages = $validator->messagesInfo();
foreach( $messages as $error )
{
throw new LogicException( $error[0] );
}
}
错误方式2 直接调用
$validator->newFails();//必须用 try catch捕获错误信息
当一个 Validator 实例被建立,fails(或 passes) 这三个方法就可以在验证时使用,如下:
if ($validator->fails())
{
// The given data did not pass validation
}
假如验证失败,您可以从验证器中接收错误信息。(1)
$messages = $validator->messagesInfo();
(返回详错误信息,格式为数组如:array('email'=>array(0=>'邮箱格式不对')))
假如验证失败,您可以从验证器中接收错误信息。(2)
$messages = $validator->messages();
假如验证失败, 直接调用。(3)
$validator->newFails();//必须用 try catch捕获错误信息
1.2. 使用错误信息
当您调用一个 validator 实例的 messages 方法后,您会得到一个命名为 messageBag的变量,该变量里有许多方便的方法能让您取得相关的错误信息。
查看一个字段的第一个错误信息
echo $messages->first('email');
查看一个字段的所有错误信息
foreach ($messages->get('email') as $message)
{
//
}
查看所有字段的所有错误信息
foreach ($messages->all() as $message)
{
//
}
判断一个字段是否有错误信息
if ($messages->has('email'))
{
//
}
1.3. 可用的验证规则
下面是一个所有可用的验证规则的列表以及它们的功能:
- Accepted
- Active URL
- After (Date)
- Alpha
- Alpha Dash
- Alpha Numeric
- Before (Date)
- Between
- Confirmed
- Date
- Date Format
- Different
- Digits
- Digits Between
- Exists (Database)
- Image (File)
- In
- Integer
- IP Address
- Max
- MIME Types
- Min
- Not In
- Numeric
- Regular Expression
- Required
- Required If
- Required With
- Required Without
- Required Without All
- Same
- Size
- URL
- Chinese
accepted
验证此规则的值必须是 yes、 on 或者是 1。这在验证是否同意"服务条款"的时候非常有用。
active_url
验证此规则的值必须是一个合法的 URL,根据 PHP 函数 checkdnsrr
。
after:date
验证此规则的值必须在给定日期之后,该日期将被传递到 PHP 的 strtotime
函数。
alpha
验证此规则的值必须全部由字母字符构成。
alpha_dash
验证此规则的值必须全部由字母、数字、中划线或下划线字符构成。
alpha_num
验证此规则的值必须全部由字母和数字构成。
before:date
验证此规则的值必须在给定日期之前,该日期将被传递到 PHP 的 strtotime
函数。
between:min,max
验证此规则的值必须在给定的 min 和 max 之间。字符串、数字以及文件都将使用大小规则进行比较。
confirmed
验证此规则的值必须和 foo_confirmation
的值相同。比如,需要验证此规则的字段是 password
,那么在输入中必须有一个与之相同的 password_confirmation
字段。
date
验证此规则的值必须是一个合法的日期,根据 PHP 函数 strtotime
。
dateformat:_format
验证此规则的值必须符合给定的 format 的格式,根据 PHP 函数 date_parse_from_format
。
different:field
验证此规则的值必须与指定的 field 字段的值不同。
digits:value
验证此规则的值必须是一个 数字 并且必须满足 value 设定的精确长度。
digitsbetween:min,max
验证此规则的值,它的长度必须介于 min 和 max 之间。
验证此规则的值必须是一个合法的电子邮件地址。
exists:table,column
验证此规则的值必须在指定的数据库的表中存在。
Exists 规则的基础使用
'state' => 'exists:states'
指定列名
'state' => 'exists:states,abbreviation'
你也可以指定更多的条件,将以 "where" 的形式添加到查询。
'email' => 'exists:staff,email,account_id,1'
传递 NULL
到 "where" 子句中,将会直接在数据库中查找 NULL
值:
'email' => 'exists:staff,email,deleted_at,NULL'
image
验证此规则的值必须是一个图片 (jpeg, png, bmp 或者 gif)。
in:foo,bar,...
验证此规则的值必须在给定的列表中存在。
integer
验证此规则的值必须是一个整数。
ip
验证此规则的值必须是一个合法的 IP 地址。
max:value
验证此规则的值必须小于最大值 value。字符串、数字以及文件都将使用大小规则进行比较。
mimes:foo,bar,...
验证此规则的文件的 MIME 类型必须在给定的列表中。
MIME 规则的基础使用
'photo' => 'mimes:jpeg,bmp,png'
min:value
验证此规则的值必须大于最小值 value。字符串、数字以及文件都将使用大小规则进行比较。
notin:_foo,bar,...
验证此规则的值必须在给定的列表中不存在。
numeric
验证此规则的值必须是一个数字。
regex:pattern
验证此规则的值必须符合给定的正则表达式。
注意: 当使用 regex
模式的时候,可能需要在一个数组中指定规则,而不是使用 "|" 分隔符,特别是正则表达式中包含一个 "|" 字符的时候。
required
验证此规则的值必须在输入数据中存在。
requiredif:_field,value
如果指定的 field 字段等于指定的 value ,那么验证此规则的值必须存在。
requiredwith:_foo,bar,...
仅当 其它指定的字段存在的时候,验证此规则的值必须存在。
requiredwithout:_foo,bar,...
仅当 其它指定的字段有一个不存在的时候,验证此规则的值必须存在。
requiredwithout_all:_foo,bar,...
仅当 其它指定的字段都不存在的时候,验证此规则的值必须存在。
same:field
验证此规则的值必须与给定的 field 字段的值相同。
size:value
验证此规则的值的大小必须与给定的 value 相同。对于字符串,value 代表字符的个数;对于数字,value 代表它的整数值,对于文件,value 代表文件以KB为单位的大小。
url
验证此规则的值必须是一个合法的 URL。
chinese
验证此规则不能为中文。
1.4. 有条件的添加规则
有时你可能希望给定的字段仅当另一个字段的值大于100的时候必须存在。或者你可能需要两个字段均含有一个给定的值,仅当另一个字段存在的时候。添加这些验证规则并没有那么麻烦。首先,创建一个使用你永远不会改变的 static rules 的 Validator
实例:
$v = validator::make($data, array(
'email' => 'required|email',
'games' => 'required|numeric',
));
假设我们的WEB应用程序是服务于游戏收藏爱好者们。如果一个游戏收藏爱好者注册了我们的应用程序,并且他们拥有100多款游戏,我们想让他们说明为什么他们会拥有如此多的游戏。例如,或许他们要开一个游戏转售店,或者也许他们只是喜欢收集。为了有条件的添加这个需求,我们可以使用 Validator
实例的 sometimes
函数。
$v->sometimes('reason', 'required|max:500', function($input)
{
return $input->games >= 100;
});
sometimes
函数的第一个参数是我们有条件的验证的字段名。第二个参数是我们要添加的规则。如果 Closure
作为第三个参数且返回了 true
,规则将被添加。这种方法可以很容易构建复杂的条件验证。你甚至可以一次性为多个字段添加条件验证:
$v->sometimes(array('reason', 'cost'), 'required', function($input)
{
return $input->games >= 100;
});