检查URL在允许通配符的PHP中是否有效
我需要检查字符串是否是有效的URL,允许在名称中使用通配符。 例如,我对URL进行了如下清理(小写,删除了example.com/path等路径,添加了http://或https://): 这些URL是有效的。 相反,我会标记为无效URL,如:检查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.) 有人能帮忙吗?
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等)都设置为“无效”呢?我编辑了我的答案,并添加了另一个示例,可以满足您的要求。太好了!非常感谢克里斯!