我有一个像$someVar = array(1,2,3,4,5)
这样的整数数组。我需要验证$someVar
以确保每个元素都是数字。我怎么能这样做?
我知道对于单值变量的情况,验证规则将类似于此$rules = array('someVar'=>'required|numeric')
。如何将相同的规则应用于数组的每个元素$someVar
?
非常感谢你的帮助。
答案 0 :(得分:16)
Validator::extend('numericarray', function($attribute, $value, $parameters)
{
foreach($value as $v) {
if(!is_int($v)) return false;
}
return true;
});
使用它
$rules = array('someVar'=>'required|numericarray')
答案 1 :(得分:6)
在Laravel 5中,您可以使用.*
检查数组中的元素。对你而言,这意味着:
$rules = array('someVar' => 'required|array',
'someVar.*' => 'integer')
答案 2 :(得分:5)
首先添加新的验证属性
Validator::extend('numeric_array', function($attribute, $values, $parameters)
{
if(! is_array($values)) {
return false;
}
foreach($values as $v) {
if(! is_numeric($v)) {
return false;
}
}
return true;
});
如果attribute不是数组或者一个值不是数值,则该函数将返回false。然后将消息添加到`app / lang / en / validation.php'
"numeric_array" => "The :attribute field should be an array of numeric values",
答案 3 :(得分:2)
您可以为数组的整数类型值检查添加自定义规则
只需打开文件
/resources/lang/en/validation.php
在接受"接受"之前添加自定义消息文件中的消息。
'numericarray' => 'The :attribute must be numeric array value.',
"accepted" => "The :attribute must be accepted.",
现在打开文件
/app/Providers/AppServiceProvider.php
然后在启动功能中添加自定义验证。
public function boot()
{
$this->app['validator']->extend('numericarray', function ($attribute, $value, $parameters)
{
foreach ($value as $v) {
if (!is_int($v)) {
return false;
}
}
return true;
});
}
现在您可以使用numericarray进行数组的整数类型值检查
$this->validate($request, [
'field_name1' => 'required',
'field_name2' => 'numericarray'
]);
答案 4 :(得分:1)
只有'阵列'验证,确保该值是一个数组,但对于您的特定情况,您将不得不创建自定义筛选器:
Laravel 3:http://three.laravel.com/docs/validation#custom-validation-rules
Laravel 4:http://laravel.com/docs/validation#custom-validation-rules
答案 5 :(得分:1)
<强> AppServiceProvider.php 强>
Validator::extend('integer_array', function($attribute, $value, $parameters)
{
return Assert::isIntegerArray($value);
});
<强> Assert.php 强>
/**
* Checks wheter value is integer array or not
* @param $value
* @return bool
*/
public static function isIntegerArray($value){
if(!is_array($value)){
return false;
}
foreach($value as $element){
if(!is_int($element)){
return false;
}
}
return true;
}