我有以下代码来验证一个人是否输入了"有效"文本框中的网址:
function validateURL(textval) {
var urlregex = new RegExp(
"^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([0-9A-Za-z]+\.)");
return urlregex.test(textval);
}
用户收到错误,这对于看似有效的urL
而返回falsehttp://a.website.com/issues/i#browse/TEST-111
有人可以确认为什么这个例子不会通过"有效的网址"测试
答案 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中允许的许多字符等)但这就是为什么您拥有的网址未通过。