首页 > 解决方案 > 用于验证带有可选端口的 URL 的正则表达式

问题描述

我试图让这个正则表达式拨入以验证 URL 是否以 https 开头,如果提供了端口,则唯一有效的值是 443 或 5443。这个正则表达式非常接近,但不完全在那里。

^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5{0,1}443)?(.)*

我该如何解决这个问题?

标签: regex

解决方案


您应该在此可选端口组之后附加 a /,这样它就不允许在 a 之前有任何数字/。尝试使用这个正则表达式,

^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5?443)?\/\S*

请注意,我也已更改(:5{0,1}443)?(:5?443)?并最后更改.*为,\S*因此 url 不会捕获空格,因为 URL 中的空格不是有效的东西。除此之外,你还可以在你的正则表达式中去掉这么多的组,除非你需要它们。

正则表达式演示

编辑:

正如您在评论中所说,您也想匹配以下网址,

https://example.com
https:example.com
https:example.com:443

\/\S*您需要通过在它们后面放置一个来使部分可选?。修改后的正则表达式变成了这个,它将匹配上面的 URL。

^https:\/\/([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5?443)?(\/\S*)?

演示文件路径部分是可选的


推荐阅读