验证 Laravel 5 中的时间戳值

MaG*_*tas 5 validation laravel laravel-5

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

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

但是时间戳字段呢?

timestamp在我的数据库迁移之一中添加了 using方法的列,它工作得很好。我唯一需要的是在执行查询之前确保传递的值是有效的时间戳。

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

谢谢

MUR*_*LAT 6

我认为像这样验证..

$rules = ['start_at' => 'date_format:Y-m-d H:i:s'];
Run Code Online (Sandbox Code Playgroud)

让我们测试一下这个规则

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 !        
}
Run Code Online (Sandbox Code Playgroud)

再次尝试使用不需要的日期格式进行测试..

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 !        
}
Run Code Online (Sandbox Code Playgroud)

看起来这个规则很有效..

更多细节L5 中的数据格式验证


PHP*_*... 5

使用这个规则

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


Pᴇʜ*_*Pᴇʜ -1

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

function isValidTimeStamp($timestamp)
{
    return ((string) (int) $timestamp === $timestamp) 
        && ($timestamp <= PHP_INT_MAX)
        && ($timestamp >= ~PHP_INT_MAX);
}
Run Code Online (Sandbox Code Playgroud)

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