Javascript:使用正则表达式进行网站网址验证

时间:2016-08-30 06:05:41

标签: javascript regex url

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

到目前为止我的正则表达式:/(https?:\/\/)?(www..)?[a-zA-Z0-9]+。[ - zA-Z] {2,} / g

但似乎失败并通过两个w ww.test.com传递url的验证

应该通过正则表达式的测试:

constexpr

不应通过正则表达式的测试:

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

有任何建议或想法吗?

3 个答案:

答案 0 :(得分:2)

即使this对这个问题的回答有点太多,它也说明了问题:即使可以创建一个regexp来检查url,解析它也会更简单,更健壮。 URL和"创建一个真实的对象",用于/可以将整体测试分解为多个较小的测试。

现在,现代浏览器的内置URL构造函数可能对您有所帮助(LINK 1LINK 2)。

测试网址的一种方法可能如下所示:

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(); }

答案 1 :(得分:0)

这是一个非官方人员,但对大多数事情都有效,并附有解释。对大多数情况来说,这应该足够了。

(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 params,它(为了简单起见)几乎可以是
  6. 有很多边缘情况会破坏,或者应该在哪里,但事实并非如此。但是,对于大多数人们没有做任何古怪的事情,这应该有用。

答案 2 :(得分:-1)

Cloning into 'first-blog'...
Username for 'https://github.com': AparnaBalagopal
Password for 'https://AparnaBalagopal@github.com': 
remote: Repository not found.
fatal: repository 'https://github.com/heroku/first-blog.git/' not found