我有一个整数数组,像这样: $someVar = array(1,2,3,4,5)
。我需要验证$someVar
以确保每个元素都是数字。我该如何做?
我知道对于单值变量的情况,验证规则可能类似于这样:$rules = array('someVar'=>'required|numeric')
。我如何将相同的规则应用于数组$someVar
中的每个元素?
非常感谢您的帮助。
我有一个整数数组,像这样: $someVar = array(1,2,3,4,5)
。我需要验证$someVar
以确保每个元素都是数字。我该如何做?
我知道对于单值变量的情况,验证规则可能类似于这样:$rules = array('someVar'=>'required|numeric')
。我如何将相同的规则应用于数组$someVar
中的每个元素?
非常感谢您的帮助。
现在 Laravel 已经支持在数组元素上设置条件。对于像验证整数数组这样的简单任务,无需编写自己的验证器。如果在控制器中使用,则可以使用以下代码:
$request->validate([
'array.*' => 'numeric',
]);
$validator = \Validator::make(compact('someVar'), [
'someVar' => 'required|array',
'someVar.*' => 'integer'
]);
$this->validateWith($validator);
or
".$this->validate($request, [
'someVar' => 'array',
'someVar.*' => 'int'
]);
Validator::extend('numericarray', function($attribute, $value, $parameters)
{
foreach($value as $v) {
if(!is_int($v)) return false;
}
return true;
});
使用它
$rules = array('someVar'=>'required|array|numericarray')
编辑:最新版本的此验证不需要定义numericarray
方法。
$rules = [
'someVar' => 'required|array',
'someVar.*' => 'integer',
];
Validator::extend('numericarray', function($attribute, $value, $parameters)
{
if(is_array($value))
{
foreach($value as $v)
{
if(!is_int($v)) return false;
}
return true;
}
return is_int($value);
});
谢谢大家。 - Kolais_numeric
而不是 is_int
。 - Mateusz Nowakuse Illuminate\Support\Facades\Validator;
- Pathros.*
检查数组中的元素。对于您来说,这意味着:$rules = array('someVar' => 'required|array',
'someVar.*' => 'integer')
首先,需要添加一个新的验证属性
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;
});
"numeric_array" => "The :attribute field should be an array of numeric values",
您可以添加自定义规则,用于检查数组中整数类型值的有效性
只需打开文件即可
/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;
});
}
$this->validate($request, [
'field_name1' => 'required',
'field_name2' => 'numericarray'
]);
只有'array'验证可以确保值为数组,但是针对您的特定情况,您需要创建自定义过滤器:
Laravel 3: http://three.laravel.com/docs/validation#custom-validation-rules
Laravel 4: http://laravel.com/docs/validation#custom-validation-rules
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;
}