使用REGEX使用GET参数验证域名

时间:2012-10-03 08:12:41

标签: php regex preg-match

我正在尝试验证域是否确实具有带有preg_match和REGEX的GET参数,我需要它才能用于我的目的。

我的工作是验证没有GET参数的域,如下所示:

if (preg_match("/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}$/", 'domain.com')) {
        echo 'true';
} else {
        echo 'false';
}

我认为这个测试是真的。

到目前为止一切顺利。我遇到的问题是添加GET参数,在我试过的一些REGEX中,仍然没有运气如下:

if (preg_match("/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}([/?].*)?$/", 'domain.com?test=test')) {
        echo 'true';
} else {
        echo 'false';
}

这里我返回false,因此无法使用所需的GET参数验证域。

任何帮助将非常感谢^^

此致

3 个答案:

答案 0 :(得分:3)

此代码未经过测试,但我认为它应该有效:

$pattern = "([a-z0-9-.]*)\.([a-z]{2,3})"; //Host
$pattern .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; //Get requests
if (preg_match($pattern, 'domain.com?test=test')) {
        echo 'true';
} else {
        echo 'false';
}

答案 1 :(得分:1)

使用REGEX有什么好处?

为什么不

<?php
$xGETS = count($_GET);
if(!$xGETS)
{
    echo 'false';
} else {
    echo 'true';
}

// PHP 5.2+ 

$xGETS = filter_var('http://domain.com?test=test', FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED);
if(!$xGETS)
{
    echo 'false';
} else {
    echo 'true';
}

答案 2 :(得分:0)

您的第一个正则表达式将拒绝一些有效的域名(例如来自museumtravel TLD以及包含大写字母的域名),并会识别一些无效的域名(例如标签所在的位置)或者整个域名太长了。)

如果你没问题,你也可以搜索第一个问号并将前缀视为域名,将后缀视为“GET参数”(实际上称为查询字符串)。

如果您不满意,由于域名和标签的长度限制,简单的正则表达式不足以验证域名。