根据模式列表检查FORMAT是否有效

时间:2015-08-04 08:14:58

标签: php

使用网址.. 我有一个可接受的网址格式列表,如下所示:

  1. domain.com/test
  2. domain.com/test /
  3. domain.com/test/?test=1
  4. domain.com/test/?test=1&bla=2
  5. 用户输入此anydomain.com/any/?test=1将根据网址格式列表中的#3条目返回True ..

    用户输入anydomain.com/any/asd/?test=1之类的内容 return false .. domain.com/返回false,因为与我的格式列表的任何条目都不匹配。

    最好的办法是什么?

    编辑:我不想检查网址是否有效!我正在尝试根据我的模式列表检查FORMAT是否有效..

3 个答案:

答案 0 :(得分:0)

您可以使用php的filter_var函数获取有效的url格式

if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
    return FALSE:
}

请注意

有效网址从http://https://

开始

答案 1 :(得分:0)

您可能需要使用正则表达式来执行此操作:

$validFormats = Array(
    'domain.com/test',
    'domain.com/test/',
    'domain.com/test/?test=(\d+)',
    'domain.com/test/?test=(\d+)&bla=(\d+)'
);

$urlToCheck = 'domain.com/test/?test=1';

$isValid = false;
foreach($validFormats as $format) {
    if(preg_match('#^'.$format.'$#i', $urlToCheck)) {
        $isValid = true;
        break;
    }
}

if($isValid) {
    echo 'Forbidden!';
} else {
    echo 'Welcome!';
}

答案 2 :(得分:0)

你必须使用这样的正则表达式:

function checkUrl($var) {
    if(is_array($var) || is_object($var)) {
        return false;
    }
    return (preg_match("`^([a-z0-9]+)\.([a-z0-9]+){2,4}/([a-z0-9]+)/?(\?[a-z0-9A-Z&=]+)?$`", $var)) ? true : false;
}
checkUrl("anydomain.com"); // false
checkUrl("anydomain.com/any"); // true
checkUrl("anydomain.com/any/"); // true
checkUrl("anydomain.com/any/?test=1"); // true
checkUrl("anydomain.com/any/?test=1&bla=2"); // true
checkUrl("anydomain.com/any/asd/?test=1"); // false