IP验证& URL验证if elseif语句?

时间:2015-01-24 07:45:12

标签: php validation

编辑。

为什么这不起作用的任何想法?我添加了' FILTER_FLAG_NO_PRIV_RANGE'标志和我还添加了一个检查,看看是否输入localhost(也许有另一种方式,当我读它时说' FILTER_FLAG_NO_PRIV_RANGE'不过滤它),但它似乎不起作用。

$post_input = 'google.com'; // IP or a URL goes here

$targets = array("localhost", "127.0.0.1", "127.1"); // The array of words / values

if (!filter_var($post_input, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) 
// The above validates IP, FILTER_FLAG_NO_PRIV_RANGE is so 192.168.1.1 etc do not work (but it is nto working).

    && filter_var($post_input, FILTER_VALIDATE_URL)
    // The above validates IP, this is fine.

    && in_array($post_input, $targets)) 
    // The above checks against the array above, if the input contains this, do not continue, go to 'Invalid IP or URL'.
{
    echo 'Invalid IP or URL';
} else {
    echo 'good';
}

注意:我删除了'!'对于URL验证,如果您想知道那是故意的。

// --------------------------------------------- ----

我知道我这样做不对,但我不知道我会怎么做。

我希望输入为IP或URL。如果是IP,它将检查它是否有效,然后跳过URL验证。如果是URL,则会对其进行验证,然后跳过IP验证

有一种简单的方法吗?

$post_data = '216.58.216.174';
$post_data = 'http://google.com'; // Could also be this

if (!filter_var($post_data, FILTER_VALIDATE_IP)) { /* Validate IP */
    echo 'Invalid IP';
}elseif (!filter_var($post_data, FILTER_VALIDATE_URL)) { /* Validate URL */
    echo 'Invalid URL';
}else {
    echo 'All Good';
}

2 个答案:

答案 0 :(得分:2)

我认为必须是这样的:

if (filter_var($post_data, FILTER_VALIDATE_IP)) { /* Validate IP */
    echo 'This is valid IP';
}elseif (filter_var($post_data, FILTER_VALIDATE_URL)) { /* Validate URL */
    echo 'This is valid URL';
}else {
    echo 'This is not either IP or URL';
}

答案 1 :(得分:0)

尝试这种方式:

if (!filter_var($post_data, FILTER_VALIDATE_IP) && !filter_var($post_data, FILTER_VALIDATE_URL)) { /* Validate IP */
    echo 'Invalid IP or URL';
} else {
    echo 'All Good';
}

查看您的修改,您应该尝试以下操作:

$post_input = 'http://google.com';
$targets = array("localhost", "127.0.0.1", "127.1"); 
if ((!filter_var($post_input, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) 
   && !filter_var($post_input, FILTER_VALIDATE_URL))
   || in_array($post_input, $targets))
{
    echo 'Invalid IP or URL';
} else {
    echo 'good';
}

Carefull,google.com无法通过FILTER_VALIDATE_URLhttp://google.com验证。

这样,结果将如下:

  • http://google.com→好。
  • 192.168.0.1→无效的IP或网址。
  • 69.23.43.12或任何有效的IP→好的。
  • 数组内容→无效的IP或URL。