JavaScript – URI正则表达式:如果URL有效,则用空字符串替换http://,https://,ftp://

前端之家收集整理的这篇文章主要介绍了JavaScript – URI正则表达式:如果URL有效,则用空字符串替换http://,https://,ftp://前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个简单的URL验证器. url验证器可能是每个其他验证器.

现在,我想要的是,如果URL通过,请使用https://,http://并将其删除为var b.

所以我做了一个另外一个正则表达式,它捕获https://,http://,ftp://等等,并且说如果url通过了长测试,则获得第二个测试并用空字符串替换它.

这是我想出来的:

$("button").on('click',function () {
   var url = $('#in').val();

   var match = /^([a-z][a-z0-9\*\-\.]*):\/\/(?:(?:(?:[\w\.\-\+!$&'\(\)*\+,;=]|%[0-9a-f]{2})+:)*(?:[\w\.\-\+%!$&'\(\)*\+,;=]|%[0-9a-f]{2})+@)?(?:(?:[a-z0-9\-\.]|%[0-9a-f]{2})+|(?:\[(?:[0-9a-f]{0,4}:)*(?:[0-9a-f]{0,4})\]))(?::[0-9]+)?(?:[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)?$/;
   var protomatch = /^(https?|ftp):\/\/(.*)/;


   if (match.test(url)) { // IF VALID
      console.log(url + ' is valid');

      // if valid replace http,https,ftp etc with empty
      var b = url.replace(protomatch.test(url),'');
      console.log(b)

   } else { // IF INVALID
      console.log('not valid')
   }

});

为什么这不行?

解决方法

protomatch.test()返回一个布尔值,而不是字符串.

我想你只是想要:

var protomatch = /^(https?|ftp):\/\//; // NB: not '.*'
...
var b = url.replace(protomatch,'');

FWIW,你的匹配正则表达式是完全不可穿透的,几乎肯定是错误的.它可能不允许国际化的领域,但很难看出我无法确定.

猜你在找的JavaScript相关文章