繁体   English   中英

为什么此javascript网址验证程序失败?

[英]Why is this javascript url validator failing?

我有以下代码来验证是否有人在文本框中输入了“有效”网址:

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

}

用户收到错误消息,错误消息中返回的错误值似乎是有效的urL

http://a.website.com/issues/i#browse/TEST-111

有人可以确认为什么此示例无法通过“有效网址”测试吗?

有人可以确认为什么此示例无法通过“有效网址”测试吗?

正则表达式的主要问题是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]+)*(?:\/[^\/]*)*$

观看演示

 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"/> 

您的正则表达式要求主机名部分以www.开头www. (一般来说,这不是URL的要求)。 您正在测试的URL不包含www.


正则表达式损坏的原因还有很多(您不能测试www.之后的第一个字符,尝试这样做会禁止URL中允许的许多字符,等等),但这就是为什么您拥有的URL是“过去了。

暂无
暂无

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

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