【问题标题】:Laravel 5 IP range validationLaravel 5 IP 范围验证
【发布时间】:2015-06-04 13:52:49
【问题描述】:

我正在为我的项目使用 Laravel 5,我需要使用自己的验证。我有 IP 范围表。 (start_ip,end_ip)。我需要检查我的 IP 范围是否可用。如何在 laravel 5 中验证 IP 范围?

【问题讨论】:

  • 如果您对我在下面的回答感到满意,您可以接受:)

标签: validation laravel ip laravel-5


【解决方案1】:

如果您的 ip 范围表仅用于检查给定 ip 是否属于网络,这是使用IPset 包 (compser require wikimedia/ip-set) 的更简单方法:

Validator::extend('ip_range',function ($attribute, $value, $parameters){
        $ipset = new IPSet(array('192.168.1.0/24');
        return ($ipset->match($value));

我在这里假设您只有一个网络(例如192.168.1.0/24),如果您有更多,您可以在阵列中放置任意数量的网络。更简洁的方法是编辑您的表格并用 cidr 注释替换您的 ips,然后更新您的代码:

$ipset = new IPSet(DB::table('your_table')->lists('your_cidr_column'));

当然不要忘记

use DB;
use IPset\Ipset;

【讨论】:

    【解决方案2】:

    使用ip_range 规则扩展验证器:

    Validator::extend('ip_range', function($attribute, $value, $parameters) {
        $ip = ip2long($value);
        $start_ip = ip2long($parameters[0]);
        $end_ip = ip2long($parameters[1]);
    
        if (!$ip || !$start_ip || !$end_ip) {
            return false;
        }
    
        return ($ip >= $start_ip && $ip <= $end_ip);
    });
    

    不要忘记将 ip_range 值添加到 lang/en/validation.php 以获得人类可读的错误消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2015-07-02
      相关资源
      最近更新 更多