使用正则表达式验证网站url

Javascript: Website url validation with regex

本文关键字:网站 url 验证 正则表达式      更新时间:2023-09-26

我正在努力在javascript中创建一个正则表达式来验证网站url。我在stackoverflow社区搜索了一下,但没有找到需要完成的有用的东西。

我的regex直到现在:/(https ?: ' '/) ? (www ')。? [a-zA-Z0-9] + ' [a-zA-Z] {2,}/g。

但它似乎失败了,并通过了两个w的url验证,如www .test.com

应该通过regex的测试:

http://www.test.com
https://www.test.com
www.test.com
www.test.co.uk
www.t.com
test.com
test.fr
test.co.uk

不应该通过regex的测试:

w.test.com
ww.test.com
www.test
test
ww.test.
.test
.test.com
.test.co.ul
.test.
有什么建议或想法吗?

即使这个答案对于这个问题来说有点太多了,但它说明了问题:即使有可能创建一个regexp来检查url,解析url并"创建一个真正的对象"要简单得多,也更健壮,使用它可以将整个测试分解为许多较小的测试。

所以可能现代浏览器内置的URL构造函数可以在这里帮助你(LINK 1, LINK 2)。

测试url的一种方法可能是这样的:

function testURL (urlstring) {
    var errors = [];
    try {
        var url = new URL(urlstring);
        if (!/https/.test(url.protocol)) {
           errors.push('wrong protocol');
        }
        //more tests here
    } catch(err) {
      //something went really wrong
      //log the error here
    } finally {
      return errors;
    }
}

if (testURL('mr.bean').length == 0) { runSomething(); }

这是一个非官方的,但对大多数事情都有效的一个解释。对于大多数情况,这应该足够好了。

(https?:'/'/)?['w'-~]+('.['w'-~]+)+('/['w'-~]*)*(#['w'-]*)?('?.*)?

  1. (https?:'/'/)? -从http://https://开始
  2. ['w'-~]+('.['w'-~]+)+后跟域名['w'-~]和至少一个扩展名('.['w'-~])+
    • ['w'-~] == [a-zA-Z0-9_'-~]
    • 多个扩展意味着test.go.place.com
  3. ('/['w'-~]*)*然后尽可能多的子目录
    • 为了方便地使test.com/通过,斜杠不强制以下字符。这可以像这样被滥用:test.com/la////la .
  4. (#['w'-]*)?后面可能跟着一个元素id
  5. ('?.*)?后面可能是url参数,这(为了简单起见)几乎可以是任何

有很多的边缘情况,这将打破,或者它应该,但它没有。但是,对于大多数情况下,人们没有做任何奇怪的事情,这应该是有效的。

/((http|https)':'/'/)?[a-zA-Z0-9'.'/'?':@'-_=#]+'.([a-zA-Z0-9'&'.'/'?':@'-_=#])*/g