验证表单http://www.test.com中的URL

时间:2010-08-23 09:21:30

标签: javascript regex validation url

我想验证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;
} 

这有什么问题? :(

提前致谢。

3 个答案:

答案 0 :(得分:5)

如果你想部分坚持你的代码,快速修复可以简单地使用这些:

"^((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”的域名。

无论如何,你的代码(以及我上面提到的调整后的代码)都是错误的,因为它们都会验证这样的ok域:

你的正则表达式也会接受这样的废话:

  • 欢呼:// WWW ...

要验证只是域名强制输入www ),您可以使用此功能:

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

这个不会验证好的垃圾:

BTW:它也会验证http://www.domain.com.com,但这不是错误,因为子域名网址可能类似于:http://www.subdomain.domain.com并且它有效! 并且几乎没有办法(或者至少没有任何简单的方法)使用正则表达式验证正确的域tld ,因为你必须将内联写入你的正则表达式所有可能的域tlds ONE BY一个像这样:

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总是出来,所以你必须调整你的regex everytimne一个新的tld出来,这很奇怪!


为了验证网址的剩余部分,您可以在正则表达式的末尾添加stillig部分:

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

它仍然不完美,因为somone可以进入:

http://www.domain.com/????hello

它会验证确定,但现在我很累,对不起! :)

答案 1 :(得分:0)

我使用这个表达 - 它是我发现的最好的:

^(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!~*'().;?:
@&=+$,%#-]+)+/*)$

答案 2 :(得分:0)

看看是否

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

是你想要的