我想有一个输入框,其中有人可以输入域,它将验证域然后将其转换为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";
}
答案 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