Validation 验证laravel 5中的时间戳值
我正在编写验证器规则,用于在添加新的雄辩模型记录之前检查数据是否有效 字符串、小数和整数都很清楚 但是时间戳字段呢 在我的一次DB迁移中,我使用Validation 验证laravel 5中的时间戳值,validation,laravel,laravel-5,Validation,Laravel,Laravel 5,我正在编写验证器规则,用于在添加新的雄辩模型记录之前检查数据是否有效 字符串、小数和整数都很清楚 但是时间戳字段呢 在我的一次DB迁移中,我使用timestamp方法添加了这个列,效果很好。我唯一需要的是在执行查询之前确保传递的值是有效的时间戳 有没有直接/简单的方法,或者我应该为此编写一个regexp 谢谢laravel中没有时间戳的验证规则。 如果您需要验证时间戳,您可以使用类似的东西: function isValidTimeStamp($timestamp) { return (
timestamp
方法添加了这个列,效果很好。我唯一需要的是在执行查询之前确保传递的值是有效的时间戳
有没有直接/简单的方法,或者我应该为此编写一个regexp
谢谢laravel中没有时间戳的验证规则。 如果您需要验证时间戳,您可以使用类似的东西:
function isValidTimeStamp($timestamp)
{
return ((string) (int) $timestamp === $timestamp)
&& ($timestamp <= PHP_INT_MAX)
&& ($timestamp >= ~PHP_INT_MAX);
}
函数isValidTimeStamp($timestamp)
{
返回((字符串)(int)$timestamp===$timestamp)
&&($timestamp=~PHP\u INT\u MAX);
}
如果使用php生成时间戳,则无需对其进行验证。如果是用户输入,则在将其转换为时间戳之前,可以使用的验证规则。您可以尝试使用解析时间戳,然后以良好的人类可读方法运行验证:
$date = Carbon::createFromTimeStamp( (int) $timestamp );
$min = Carbon::create( 2014, 12, 31, 23, 59, 59 );
$max = Carbon::create( 2015, 12, 31, 23, 59, 59 );
return $date->gt( $min ) && $date->lte( $max );
但是,对于实际验证原始时间戳本身,除了对原始数字执行与上面相同的操作之外,我想不出多少其他方法:
return 1420030799 < $timestamp && $timestamp <= 1451566799;
返回1420030799<$timestamp&&$timestamp只需在laravel中创建一个新的验证规则来验证时间戳
Validator::extend('isTimeStamp', function($attribute, $value, $parameters)
{
return ((string) (int) $value === $value)
&& ($value <= PHP_INT_MAX)
&& ($value >= ~PHP_INT_MAX);
});
Validator::extend('isTimeStamp',函数($attribute,$value,$parameters)
{
返回((字符串)(int)$value==$value)
&&($value=~PHP\u INT\u MAX);
});
您现在可以使用isTimeStamp
验证规则来验证时间戳。我认为验证是这样的
$rules = ['start_at' => 'date_format:Y-m-d H:i:s'];
让我们测试一下这个规则
public function testSimpleTimeStampValidation()
{
$data = ['start_at' => '2015-12-1 12:12:58'];
$rules = ['start_at' => 'date_format:Y-m-d H:i:s'];
$validator = \Validator::make($data, $rules);
$this->assertTrue($validator->passes()); // passed !
}
public function rules()
{
return [
'date_time' => 'date_format:Y-m-d H:i:s'
];
}
再次尝试使用不需要的日期格式进行测试
public function testSimpleTimeStampValidation()
{
$data = ['start_at' => '12-1-2015 12:12:58'];
$rules = ['start_at' => 'date_format:Y-m-d H:i:s'];
$validator = \Validator::make($data, $rules);
$this->assertTrue($validator->passes()); // Failed !
}
看来这条规则很管用
更多详细信息使用此规则
public function testSimpleTimeStampValidation()
{
$data = ['start_at' => '2015-12-1 12:12:58'];
$rules = ['start_at' => 'date_format:Y-m-d H:i:s'];
$validator = \Validator::make($data, $rules);
$this->assertTrue($validator->passes()); // passed !
}
public function rules()
{
return [
'date_time' => 'date_format:Y-m-d H:i:s'
];
}
如果有,我还没有看到。我使用正则表达式。这可能有用。我必须回到这个问题上,看看我在近两个月前做了些什么。ThanksI已经测试了ın PHPUnit测试。我确信“日期格式:Y-m-d H:I:s”规则适用于(字符串)(int)
在$value
之前做什么?