繁体   English   中英

以http://www.test.com形式验证URL

[英]validate URL in form http://www.test.com

我想验证URL(使用Java脚本)以仅接受格式-http: //www.test.com 我正在尝试遵循以下代码,但它也接受test.com和http://www.test.com.com

var URLReg = new RegExp();
URLReg.compile("^[A-Za-z]+://[A-Za-z0-9-_]+\\.[A-Za-z0-9-_%&\?\/.=]+$");
if (!URLReg.test(form["URL"].value)) {
    alert("You must supply a valid URL.");
    return false;
} 

这有什么问题? :(

提前致谢。

如果您想部分坚持自己的代码,可以使用以下方法快速解决:

"^((https?\\\\://www\\\\.)|(www\\\\.))[A-Za-z0-9_\\\\-]+\\\\.[A-Za-z0-9_\\\\-\\\\%\\\\&\\\\?\\\\.\\\\=\\\\+]+$" (接受“ http:// www ....”和“ www ...”)

要么

"^(https?\\\\://www\\\\.)[A-Za-z0-9_\\\\-]+\\\\.[A-Za-z0-9_\\\\-\\\\%\\\\&\\\\?\\\\.\\\\=\\\\+]+$" (仅接受“ http:// www ....”,不接受“ www ...”)

以上两个都不接受没有“ www”的域名。

无论如何,您的代码(以及我在上面放置的调整后的代码)都是错误的,因为它们都将验证如下所示的正常域:

您的正则表达式也将接受以下废话:

  • 干杯// www ...

验证域部分强制输入www ),可以使用以下命令:

var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+[a-z]+$/i;

这不会验证像这样的废话:

顺便说一句:它也可以验证http://www.domain.com.com,但这不是错误,因为子域url可能类似于: http : //www.subdomain.domain.com ,它是有效的! 而且几乎没有方法(或至少没有操作上简便的方法)使用正则表达式来验证正确的域tld ,因为您必须将所有可能的域 tld逐一 内联写入正则表达式中,如下所示:

var URLReg = /^((https?\://wwww\.)|(www\.))([a-z0-9]([a-z0-9]|(\-[a-z0-9]))*\.)+(com|it|net|uk|de)$/i;

(例如,最后一个仅验证以.com / .net / .de / .it / .co.uk结尾的域)新tld 总是会出现 ,因此您必须对正则表达式进行调整,以使新tld出现,真奇怪!


为了也验证URL的其余部分,您可以在regex的末尾添加restig部分:

var URLReg = /^((https?\\://wwww\\.)|(www\\.))([a-z0-9]([a-z0-9]|(\\-[a-z0-9]))*\\.)+[az]+(\\/[a-z0-9_\\-\\%\\&\\?\\.\\=\\+]*)*$/i ;

它仍然不是完美的,因为有人可能进入:

http://www.domain.com/?

可以验证,但是现在我很累,对不起! :)

我使用此表达-我发现的最好的表达:

^(https?://)?(([\w!~*'().&=+$%-]+: )?[\w!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([\w!~*'()-]+\.)*
([\w^-][\w-]{0,61})?[\w]\.[a-z]{2,6})(:[0-9]{1,4})?((/*)|(/+[\w!~*'().;?:
@&=+$,%#-]+)+/*)$

看看

^[A-Za-z]+:\/\/[A-Za-z0-9-/]+\.com$

是你想要的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM