为什么这个javascript url验证器失败了?

时间:2015-06-11 13:02:39

标签: javascript regex parsing url

我有以下代码来验证一个人是否输入了"有效"文本框中的网址:

 function validateURL(textval) {
var urlregex = new RegExp(
    "^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
return urlregex.test(textval);

}

用户收到错误,这对于看似有效的urL

而返回false
http://a.website.com/issues/i#browse/TEST-111

有人可以确认为什么这个例子不会通过"有效的网址"测试

2 个答案:

答案 0 :(得分:1)

  

有人可以确认为什么这个例子不会通过“有效网址”测试吗?

正则表达式的主要问题是www.部分在模式中是强制

如果您想将其设为可选项,请使用?修饰符及其周围的组((?:www\.)?):

^(?:(?:(?:ftp|https?):\/\/)?)(?:www\.)?[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*

这将匹配http://a.website.com部分。要匹配整个字符串,您可以使用:

^(?:(?:(?:ftp|https?):\/\/)?)(www\.)?[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*(?:\/[^\/]*)*$

请参阅demo

var re = /^(?:(?:(?:ftp|https?):\/\/)?)(www\.)?[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*(?:\/[^\/]*)*$/; 
var str = 'http://a.website.com/issues/i#browse/TEST-111';
 
if ((m = re.exec(str)) !== null) {
    document.getElementById("res").innerHTML = m[0];
}
<div id="res"/>

答案 1 :(得分:0)

您的正则表达式要求主机名部分以www.开头(这通常不是URL的要求)。您正在测试的网址不包含www.

还有许多其他原因导致正则表达式被破坏(你没有测试www.之后的第一个字符,你尝试这样做会禁止URL中允许的许多字符等)但这就是为什么您拥有的网址未通过。