Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查URL在允许通配符的PHP中是否有效_Php_Regex_Validation - Fatal编程技术网

检查URL在允许通配符的PHP中是否有效

检查URL在允许通配符的PHP中是否有效,php,regex,validation,Php,Regex,Validation,我需要检查字符串是否是有效的URL,允许在名称中使用通配符。 例如,我对URL进行了如下清理(小写,删除了example.com/path等路径,添加了http://或https://): 这些URL是有效的。 相反,我会标记为无效URL,如: http://example.*.com http://example http://*.it (and obviously any not-valid URL, so remove invalid characters etc.) 有人能帮忙吗?

我需要检查字符串是否是有效的URL,允许在名称中使用通配符。 例如,我对URL进行了如下清理(小写,删除了example.com/path等路径,添加了http://或https://):

这些URL是有效的。 相反,我会标记为无效URL,如:

http://example.*.com

http://example

http://*.it
(and obviously any not-valid URL, so remove invalid characters etc.)
有人能帮忙吗?我试过很多正则表达式,但没有一个有效

我的模式应该类似于:
[http://].*|a-z | www].[a-z].[tld]
(也允许四级域!)


提前谢谢

正则表达式很棘手,但我想到的是:

<?php
function is_valid_domain_name($domain_name,&$matches)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name,$matches) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}
我将可选的$matches参数包含在preg_match中,以便查看正则表达式与哪个字符串匹配

您的最终代码可能是:

<?php
function is_valid_domain_name($domain_name)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}

正则表达式很棘手,但我想到的是:

<?php
function is_valid_domain_name($domain_name,&$matches)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name,$matches) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}
我将可选的$matches参数包含在preg_match中,以便查看正则表达式与哪个字符串匹配

您的最终代码可能是:

<?php
function is_valid_domain_name($domain_name)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}

正则表达式很棘手,但我想到的是:

<?php
function is_valid_domain_name($domain_name,&$matches)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name,$matches) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}
我将可选的$matches参数包含在preg_match中,以便查看正则表达式与哪个字符串匹配

您的最终代码可能是:

<?php
function is_valid_domain_name($domain_name)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}

正则表达式很棘手,但我想到的是:

<?php
function is_valid_domain_name($domain_name,&$matches)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name,$matches) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}
我将可选的$matches参数包含在preg_match中,以便查看正则表达式与哪个字符串匹配

您的最终代码可能是:

<?php
function is_valid_domain_name($domain_name)
{
    return (preg_match("/^(\*\.)?([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $domain_name) //valid chars check
            && preg_match("/^.{1,253}$/", $domain_name) //overall length check
            && preg_match("/^[^\.]{1,63}(\.[^\.]{1,63})*$/", $domain_name)   ); //length of each label
}


您可能想看看这里:我认为它不包括通配符检查,但您应该能够添加它。您可能想考虑什么构成有效的域名。e、 g.
uz.
有效,并解析为IP地址。@ChrisRasco我认为该解决方案是最好的;但是,如何仅为单个通配符而不在第二级和顶级域中添加通配符检查?罗伯法尔,我知道乌兹。是一个有效的URL,但我只需要验证我编写的模式,这只是第二/三级域,在第三级上可能有通配符。@CarmineGiangregorio实际上,通配符检查最好在代码中完成。在正则表达式验证(使用允许通配符的正则表达式)之后,使用库或函数解析URL,然后检查以确保存在的任何通配符仅位于域名的第一部分。您可能想看看这里:我认为它不包括通配符检查,但是你应该可以加上这一点。你可能想想想什么是有效的域名。e、 g.
uz.
有效,并解析为IP地址。@ChrisRasco我认为该解决方案是最好的;但是,如何仅为单个通配符而不在第二级和顶级域中添加通配符检查?罗伯法尔,我知道乌兹。是一个有效的URL,但我只需要验证我编写的模式,这只是第二/三级域,在第三级上可能有通配符。@CarmineGiangregorio实际上,通配符检查最好在代码中完成。在正则表达式验证(使用允许通配符的正则表达式)之后,使用库或函数解析URL,然后检查以确保存在的任何通配符仅位于域名的第一部分。您可能想看看这里:我认为它不包括通配符检查,但是你应该可以加上这一点。你可能想想想什么是有效的域名。e、 g.
uz.
有效,并解析为IP地址。@ChrisRasco我认为该解决方案是最好的;但是,如何仅为单个通配符而不在第二级和顶级域中添加通配符检查?罗伯法尔,我知道乌兹。是一个有效的URL,但我只需要验证我编写的模式,这只是第二/三级域,在第三级上可能有通配符。@CarmineGiangregorio实际上,通配符检查最好在代码中完成。在正则表达式验证(使用允许通配符的正则表达式)之后,使用库或函数解析URL,然后检查以确保存在的任何通配符仅位于域名的第一部分。您可能想看看这里:我认为它不包括通配符检查,但是你应该可以加上这一点。你可能想想想什么是有效的域名。e、 g.
uz.
有效,并解析为IP地址。@ChrisRasco我认为该解决方案是最好的;但是,如何仅为单个通配符而不在第二级和顶级域中添加通配符检查?罗伯法尔,我知道乌兹。是一个有效的URL,但我只需要验证我编写的模式,这只是第二/三级域,在第三级上可能有通配符。@CarmineGiangregorio实际上,通配符检查最好在代码中完成。在正则表达式验证(使用允许通配符的正则表达式)之后,使用库或函数解析URL,然后检查以确保存在的任何通配符都只在域名的第一部分。这几乎是完美的,谢谢!但是,只有一件事:我怎么能把所有顶级域(如:localhost等)都设置为“无效”呢?我编辑了我的答案,并添加了另一个示例,可以满足您的要求。太好了!非常感谢克里斯!这几乎是完美的,谢谢你!但是,只有一件事:我怎么能把所有顶级域(如:localhost等)都设置为“无效”呢?我编辑了我的答案,并添加了另一个示例,可以满足您的要求。太好了!非常感谢克里斯!这几乎是完美的,谢谢你!但是,只有一件事:我怎么能把所有顶级域(如:localhost等)都设置为“无效”呢?我编辑了我的答案,并添加了另一个示例,可以满足您的要求。太好了!非常感谢克里斯!这几乎是完美的,谢谢你!但是,只有一件事:我怎么能把所有顶级域(如:localhost等)都设置为“无效”呢?我编辑了我的答案,并添加了另一个示例,可以满足您的要求。太好了!非常感谢克里斯!