我正在努力在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
有任何建议或想法吗?
答案 0 :(得分:2)
即使this对这个问题的回答有点太多,它也说明了问题:即使可以创建一个regexp来检查url,解析它也会更简单,更健壮。 URL和"创建一个真实的对象",用于/可以将整体测试分解为多个较小的测试。
现在,现代浏览器的内置URL
构造函数可能对您有所帮助(LINK 1,LINK 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\-]*)?(\?.*)?
(https?:\/\/)?
- 从http://
或https://
开始,不是[\w\-~]+(\.[\w\-~]+)+
使用域名[\w\-~]
和至少一个扩展名(\.[\w\-~])+
关注它
[\w\-~]
== [a-zA-Z0-9_\-~]
test.go.place.com
(\/[\w\-~]*)*
然后尽可能多的子目录
test.com/
通过,斜杠不会强制执行后续字符。这可能会被滥用:test.com/la////la
。(#[\w\-]*)?
可能是元素ID (\?.*)?
也许是url params,它(为了简单起见)几乎可以是有很多边缘情况会破坏,或者应该在哪里,但事实并非如此。但是,对于大多数人们没有做任何古怪的事情,这应该有用。
答案 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