IP&域名gethostbyname为preg_match

时间:2015-01-18 03:23:31

标签: php

我想有一个输入框,其中有人可以输入域,它将验证域然后将其转换为IP,然后验证IP。如果IP未验证,则不会回显。

所以,我想知道这是否是最好的方法,或者有更好的方法吗?

$input = 'somedoaminhere.com';

$ValidIp = "/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/";

$parse = parse_url($input);
$ip = gethostbyname($parse['host']);

if (preg_match("$ValidIp", "$ip")) {
    echo "$ip";
} else {
    echo "none";
}

2 个答案:

答案 0 :(得分:1)

"然后验证IP"如果IP由gethostbyname返回,那么验证IP的重点是它应该是有效的IP。

但是,我会这样做。

$ ip =" 127.0.0.300&#34 ;;

$octals = explode(".",$ip);
$isValid=true;
foreach($octals as $oct)
{
    if($oct<0 || $oct>255)
    {$isValid=false;}
}
if($isValid)
    {echo "Is Valid";}
else
    {echo "Is no Valid";}

您当然可以清理代码。我一步一步地保留它,以便原因/步骤显而易见。

答案 1 :(得分:1)

PHP内置了一组强大的功能来验证和验证。消毒输入:Filter

如果您只是验证IP地址,请使用:

$ip = '1.2.3.4';
$f = filter_var($ip, FILTER_VALIDATE_IP);  // $f == '1.2.3.4'

$ip = '1.2.3.300';
$f = filter_var($ip, FILTER_VALIDATE_IP);  // $f == false

如果使用标志,可以使用过滤器功能执行更多操作。例如,验证IPV4地址并排除私有范围:

$f = filter_var($ip, FILTER_VALIDATE_IP, array('flags'=>FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE));

如果您从gethostbyname()获取IP地址,那么这样做是没有意义的,因为这应该返回一个有效的地址。

您可以使用filter_*()功能执行更多操作,例如,在单个函数调用中验证并清除$_GET$_POST中的所有用户数据。查看PHP Reference