Javascript正则表达式用于不含http的URL

26 浏览
0 Comments

Javascript正则表达式用于不含http的URL

如何修改下面的正则表达式,以便没有'http://'、'https://'、'ftp://'或'mailto://'的URL仍然被视为有效?该正则表达式来自validator.js

var url = 'www.test.com';
isURL(url);
function isURL(url) {
     var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$';
     var urlT = new RegExp(urlRegex, 'i');
     if(!(url.length < 2083 && urlT.test(url)))
     {
         alert("无效的URL");
     }
     else
     {
         alert("有效的URL");
     }
}

将上述正则表达式修改为,即使没有'http://'、'https://'、'ftp://'或'mailto://',URL仍然被视为有效的正则表达式。

0
0 Comments

问题的出现是因为使用了validation.js库,该库默认会验证url是否包含http协议。如果不想验证http协议,可以通过设置选项将require_protocol和require_valid_protocol都设置为false。代码如下:

var isUrl = validator.isUrl(url, {require_protocol:false, require_valid_protocol:false});

但是根据上述代码和文本的描述,似乎validation.js库默认就是不要求包含http协议的。所以可能您并没有直接使用该库。

解决方法就是使用validation.js库,并设置选项require_protocol和require_valid_protocol为false,这样就可以验证不包含http协议的url。

0
0 Comments

Javascript中的正则表达式可以用来验证URL的格式。通常情况下,我们会使用类似于(?:(?:http|https|ftp)://)的正则表达式来匹配URL中的协议部分(如http、https或ftp)。然而,有时候我们可能会遇到一个奇怪的要求,即需要验证不包含协议部分(如http://)的URL。

为了满足这个要求,我们可以使用?来将(?:(?:http|https|ftp)://)部分设为可选。具体来说,我们可以使用(?:(?:http|https|ftp)://)?的正则表达式来匹配URL。

这样,当我们使用这个正则表达式验证URL时,如果URL包含协议部分(如http://),它也会被正确地匹配。而如果URL不包含协议部分,它也能够成功地匹配。

下面是一个示例代码,演示了如何使用这个正则表达式来验证URL:

const urlRegex = /^(?:(?:http|https|ftp):\/\/)?([a-zA-Z0-9-.]+(?:\.[a-zA-Z0-9-]+)*\.[a-zA-Z]{2,}(?:\/\S*)?)$/;
function validateUrl(url) {
  return urlRegex.test(url);
}
console.log(validateUrl("https://www.example.com"));  // true
console.log(validateUrl("www.example.com"));         // true
console.log(validateUrl("example.com"));             // true
console.log(validateUrl("ftp://example.com"));       // true
console.log(validateUrl("http://www.example.com"));  // true

通过上述代码,我们可以看到,在使用这个正则表达式验证URL时,不管URL是否包含协议部分,都能够正确地验证。

因此,通过将(?:(?:http|https|ftp)://)设为可选,我们可以满足验证不包含协议部分的URL的需求。

0