在laravel 5中验证时间戳值

时间:2015-05-18 11:08:44

标签: validation laravel laravel-5

我正在编写验证器规则,用于在添加新的Eloquent模型记录之前检查数据是否有效。

字符串,小数和整数非常清楚。

但是时间戳字段呢?

我在我的一次数据库迁移中使用timestamp方法添加了列,它运行正常。我唯一需要的是确保在执行查询之前传递的值是一个有效的时间戳。

是否有直接/简单的方法,还是应该为此编写正则表达式?

谢谢

5 个答案:

答案 0 :(得分:3)

我认为像这样验证..

$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 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 !        
}

看起来这条规则很有效。

更多详情Data Format Validation in L5

答案 1 :(得分:1)

使用此规则

   public function rules()
    {
        return [
            'date_time' => 'date_format:Y-m-d H:i:s'
        ];
    }

答案 2 :(得分:0)

laravel中没有时间戳的验证规则。 如果您需要验证时间戳,可以使用类似的东西:

function isValidTimeStamp($timestamp)
{
    return ((string) (int) $timestamp === $timestamp) 
        && ($timestamp <= PHP_INT_MAX)
        && ($timestamp >= ~PHP_INT_MAX);
}

如果在php中生成时间戳,则无需验证它。如果是用户输入,则可以在将其转换为时间戳之前使用laravel validatordate验证规则。

答案 3 :(得分:0)

您可以尝试使用Carbon来解析时间戳,然后以人类可读的方法运行验证:

$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;

但这比Carbon方法更难以阅读和维护。

答案 4 :(得分:0)

只需在laravel中创建一个新的验证规则以验证时间戳...

Validator::extend('isTimeStamp', function($attribute, $value, $parameters)
{
    return ((string) (int) $value === $value) 
           && ($value <= PHP_INT_MAX)
           && ($value >= ~PHP_INT_MAX);
});

您现在可以使用isTimeStamp验证规则来验证时间戳。