3

我正在尝试验证域是否具有 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';
}

在这里,我得到错误返回,因此无法使用所需的 GET 参数验证域。

任何帮助将不胜感激^^

问候

4

3 回答 3

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';
}
于 2012-10-03T08:44:48.727 回答
1

使用正则表达式有什么好处?

为什么不只是

<?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';
}
于 2012-10-03T09:01:18.713 回答
0

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

如果这对您来说没问题,您不妨搜索第一个问号,并将前缀视为域名,将后缀视为“GET 参数”(实际上称为查询字符串)。

如果这不适合您,那么简单的正则表达式将不足以验证域名,因为域名和标签的长度限制。

于 2012-10-03T09:02:03.487 回答