我有一个输入字段,该字段应该只接受有效的 HTTPS URL。不过,我很难找到适合这项工作的完美正则表达式模式。我尝试了几种选择,也询问了人工智能,但它似乎还没有真正理解正则表达式。因此我决定询问旧的堆栈溢出问题。
以下两种模式最接近我想要的,但它们仍然有缺陷。
pattern="https:\/\/([a-zA-Z0-9]+\.)*[a-zA-Z0-9]{2,}(\.[a-zA-Z0-9]{2,})+[\/?]?.*$"
这种模式非常适合您的标准 URL,例如https://www.example.com但是,我还想允许端口号而不是 TLD,主要是允许本地主机 url 因此我也尝试了选项2:
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 的模式:
还具备以下先决条件:
这将告诉您该网址在语法上是否正确,因此这是一个很好的起点,之后您可以包含更多条件...
try{
let Url = new URL('https://example.com');
// Syntactically good, proceed with further tests/conditions
} catch(e){
// Syntactically bad
}