嗨,我想验证以下网址,所以只要有.com,.net,.org等TLD,他们都会在有或没有http/www部分的情况下通过.
有效的URL应该是:
http://www.domain.com
http://domain.com
https://www.domain.com
https://domain.com
www.domain.com
domain.com
Run Code Online (Sandbox Code Playgroud)
支持长tlds:
http://www.domain.com.uk
http://domain.com.uk
https://www.domain.com.uk
https://domain.com.uk
www.domain.com.uk
domain.com.uk
Run Code Online (Sandbox Code Playgroud)
支持破折号( - ):
http://www.domain-here.com
http://domain-here.com
https://www.domain-here.com
https://domain-here.com
www.domain-here.com
domain-here.com
Run Code Online (Sandbox Code Playgroud)
还要支持域中的数字:
http://www.domain1-test-here.com
http://domain1-test-here.com
https://www.domain1-test-here.com
https://domain1-test-here.com
www.domain1-test-here.com
domain-here.com
Run Code Online (Sandbox Code Playgroud)
也许甚至允许IP:
127.127.127.127
Run Code Online (Sandbox Code Playgroud)
(但这是额外的!)
也允许破折号( - ),忘了提及=)
我发现许多功能可以验证一个或另一个但不能同时验证.如果有人知道正确的正则表达式,请分享.谢谢您的帮助.
小智 5
对于 url 验证完美的解决方案。
以上答案是正确的,但不适用于 .me、.it、.in 等所有域
所以请在下面的用户进行 url 匹配:
$pattern = '/(?:https?:\/\/)?(?:[a-zA-Z0-9.-]+?\.(?:[a-zA-Z])|\d+\.\d+\.\d+\.\d+)/';
if(preg_match($pattern, "http://website.in"))
{
echo "valid";
}else{
echo "invalid";
}
Run Code Online (Sandbox Code Playgroud)
当您忽略路径部分并仅查找域部分时,一个简单的规则是
(?:https?://)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+)
Run Code Online (Sandbox Code Playgroud)
如果您还想支持国家/地区 TLD,则必须提供完整的(当前)列表或附加|..到 TLD 部分。
preg_match您必须将其包裹在一些分隔符之间
$pattern = ';(?:https?://)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+);';
$index = preg_match($pattern, $url);
Run Code Online (Sandbox Code Playgroud)
通常,您使用/. 但在本例中,斜杠是模式的一部分,因此我选择了其他一些分隔符。否则我必须转义斜线\
$pattern = '/(?:https?:\/\/)?(?:[a-zA-Z0-9.-]+?\.(?:com|net|org|gov|edu|mil)|\d+\.\d+\.\d+\.\d+)/';
Run Code Online (Sandbox Code Playgroud)