我正在尝试拨入此正则表达式以验证URL是否以https开头,并且如果提供了端口,则唯一有效的值是443或5443。该正则表达式非常接近,但还不足够。
^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,})(:5{0,1}443)?(.)*
如何解决此问题?
答案 0 :(得分:1)
您应该在此可选端口组后面附加一个/
,以便在/
之前不允许任何数字。尝试使用此正则表达式,
^(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*)?
答案 1 :(得分:0)
这是一个主流的URL验证器,用于测试它是否在空白边界之间。
它仅允许使用https设备和端口号5443或443。
(?<!\S)https://(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::5?443)?(?:/[^\s]*)?(?!\S)
可读版本
(?<! \S )
https ://
(?:
\S+
(?: : \S* )?
@
)?
(?:
(?:
(?:
[1-9] \d?
| 1 \d\d
| 2 [01] \d
| 22 [0-3]
)
(?:
\.
(?: 1? \d{1,2} | 2 [0-4] \d | 25 [0-5] )
){2}
(?:
\.
(?:
[1-9] \d?
| 1 \d\d
| 2 [0-4] \d
| 25 [0-4]
)
)
| (?:
(?: [a-z\u00a1-\uffff0-9]+ -? )*
[a-z\u00a1-\uffff0-9]+
)
(?:
\.
(?: [a-z\u00a1-\uffff0-9]+ -? )*
[a-z\u00a1-\uffff0-9]+
)*
(?:
\.
(?: [a-z\u00a1-\uffff]{2,} )
)
)
| localhost
)
(?: : 5? 443 )?
(?: / [^\s]* )?
(?! \S )
答案 2 :(得分:-1)
您的RegEx似乎工作正常。出于安全考虑,您可以尝试使用this RegEx并添加其他边界:
^(https:\/\/)([a-zA-Z\d\.]{2,})\.([a-zA-Z]{2,}):(5443|443)?$
我只添加了 $ 结尾字符,以便从右侧绑定您的原始表达式。您可以在此捕获组中仅添加一些端口号(如果有):
(5443|443)
如果愿意,您也可以删除不必要的边界。