HTTPS URL 的 HTML 输入验证,接受 TLD 和端口号 [已关闭]

问题描述 投票:0回答:1

我有一个输入字段,该字段应该只接受有效的 HTTPS URL。不过,我很难找到适合这项工作的完美正则表达式模式。我尝试了几种选择,也询问了人工智能,但它似乎还没有真正理解正则表达式。因此我决定询问旧的堆栈溢出问题。

以下两种模式最接近我想要的,但它们仍然有缺陷。

  1. pattern="https:\/\/([a-zA-Z0-9]+\.)*[a-zA-Z0-9]{2,}(\.[a-zA-Z0-9]{2,})+[\/?]?.*$"
    这种模式非常适合您的标准 URL,例如https://www.example.com

但是,我还想允许端口号而不是 TLD,主要是允许本地主机 url 因此我也尝试了选项2:

  1. pattern="https:\/\/(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))"
    这样,两个 URL(如 https://www.example.com)和 localhost URL(如 https://localhost:43500) 被接受了,但这种模式最终有点过于宽容。它还接受 https://example 之类的内容,这显然不是有效的 URL。对于常规 URL,它也不再允许在 / 之后使用子路由

现在我不是正则表达式专家,但我希望这个网站上的大家可以帮助我!基本上我想要的是一种允许以下所有类型 URL 的模式:

还具备以下先决条件:

  • URL 应始终以 https 开头
  • URL 应允许 / 之后的子路由
  • 它应始终具有 TLD 或端口号之一。从来没有一个,也从来没有两个!
javascript html regex validation input
1个回答
0
投票

这将告诉您该网址在语法上是否正确,因此这是一个很好的起点,之后您可以包含更多条件...

try{

 let Url = new URL('https://example.com');

 // Syntactically good, proceed with further tests/conditions

} catch(e){

 // Syntactically bad

}
© www.soinside.com 2019 - 2024. All rights reserved.