Validation 验证laravel 5中的时间戳值

Validation 验证laravel 5中的时间戳值,validation,laravel,laravel-5,Validation,Laravel,Laravel 5,我正在编写验证器规则,用于在添加新的雄辩模型记录之前检查数据是否有效 字符串、小数和整数都很清楚 但是时间戳字段呢 在我的一次DB迁移中,我使用timestamp方法添加了这个列,效果很好。我唯一需要的是在执行查询之前确保传递的值是有效的时间戳 有没有直接/简单的方法,或者我应该为此编写一个regexp 谢谢laravel中没有时间戳的验证规则。 如果您需要验证时间戳,您可以使用类似的东西: function isValidTimeStamp($timestamp) { return (

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

字符串、小数和整数都很清楚

但是时间戳字段呢

在我的一次DB迁移中,我使用
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
之前做什么?