Regex用于以https开头的有效URL [已关闭]

r8uurelv  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(71)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

7小时前关闭
截至4小时前,社区正在审查是否重新开放此问题。
Improve this question
我使用下面的正则表达式来匹配一个有效的URL。
但是它接受一个包含三个///的URL,比如https:///example.com,这是无效的。

正则表达式

"^(https)" + // protocol
        ":(?:\\/\\/)";
pgky5nke

pgky5nke1#

我很确定你不能用正则表达式来捕捉URL的所有极端情况。有什么理由要使用这样一个怪物,而不是用java.net.URI解析URL并查看方案吗?

URI uri = new URI(str);
uri.getScheme();
anhgbhbe

anhgbhbe2#

使用惯用类URL来验证粗粒度。然后,您可以分别验证每个组件:

  • 方案/协议
  • 主机/域,端口(授权)
  • 路径,查询
// Invalid URL format example 
String invalidTripleSlash = "https:///example.com";

URL myUrl;

// Validate URL format to conform RFC 1738
try {
  myUrl = new URL(invalidTripleSlash);
} catch(MalformedURLException e) {
  System.out.println(e); // should fail here when 3 slashes
}

/* 
 * Further validation on each component.
 * Could also extract cleanly to a separate method or validator class.
 */

var protocol = myUrl.getProtocol();
// Validate that protocol is only secure HTTPs
boolean isSecureHTTP = protocol.toLowerCase().matches("https");

var host = myUrl.getHost();
var port = myUrl.getPort();

var path = myUrl.getPath();
var query = myUrl.getQuery();

相关问题