我想验证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;
}
这有什么问题? :(
提前致谢。
答案 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 ),您可以使用此功能:
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$
是你想要的