【发布时间】:2015-06-04 13:52:49
【问题描述】:
我正在为我的项目使用 Laravel 5,我需要使用自己的验证。我有 IP 范围表。 (start_ip,end_ip)。我需要检查我的 IP 范围是否可用。如何在 laravel 5 中验证 IP 范围?
【问题讨论】:
-
如果您对我在下面的回答感到满意,您可以接受:)
标签: validation laravel ip laravel-5
我正在为我的项目使用 Laravel 5,我需要使用自己的验证。我有 IP 范围表。 (start_ip,end_ip)。我需要检查我的 IP 范围是否可用。如何在 laravel 5 中验证 IP 范围?
【问题讨论】:
标签: validation laravel ip laravel-5
如果您的 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;
【讨论】:
使用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 以获得人类可读的错误消息。
【讨论】: