关于域名的js正则问题

求一个正则 希望是必须要http://开头

http://www.segmentfault.com         //true
http://www.segmentfault.com:8080    //true
http://10.50.1.50                   //true
http://10.50.1.50:2000              //true
http://10.50.1.50:2000/temp/test    //true

http://10.50.1.50:                    //false
http://10.50.1.                       //false
http://www.segmentfault.com:a         //false
阅读 1.4k
2 个回答

可以通过 URLPattern 来匹配检测网址

const pattern = new URLPattern({ protocol: 'http' }); // 指定主机为 http
pattern.test('http://www.segmentfault.com:8080') // true
pattern.test('http://www.segmentfault.com:a') // false(port只能为数字)
pattern.test('http://10.50.1.50:2000/temp/test') // true

不过,按照网址的规则,以下两个都应该是合法的,所以这个方法也通过了

http://10.50.1.50:
http://10.50.1.     

/^http:\/\/[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\*\+,;=.]+$/


另:不建议用正则完成,js 有原生的方法可以检验

const isValidUrl = url => {
    try {
        new URL(url)
        return true
    }
    catch {
        return false
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题