我正在尝试验证域是否确实具有带有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参数验证域。
任何帮助将非常感谢^^
此致
答案 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)
您的第一个正则表达式将拒绝一些有效的域名(例如来自museum
和travel
TLD以及包含大写字母的域名),并会识别一些无效的域名(例如标签所在的位置)或者整个域名太长了。)
如果你没问题,你也可以搜索第一个问号并将前缀视为域名,将后缀视为“GET参数”(实际上称为查询字符串)。
如果您不满意,由于域名和标签的长度限制,简单的正则表达式不足以验证域名。