我需要匹配满足以下要求的CORS网址:
计划是' http'和' https'
应该允许Localhost。
主持人可能有
-
个字符可以为整个子域或尾随通配符
*
添加通配符*
。TLD部分不是可选的
细分受限制为{1,63}
允许:
https://localhost.localdomain
http://127.0.0.1
http://*.example.com
http://my*.example.com
https://env-us.example.com
https://*.example.com
https://*.example.net
http://localhost (hardcoded to allow)
不允许:
https://www.test.012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
https://012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789.com
http://m*y.example.com
http://*my.example.com
http://.example.com
http://example.com*
http://-.com
http://z-.com
https://my.best-example*.best-example*.com
http://127*.0.0.1
https://my.*.com
答案 0 :(得分:2)
您可以使用
^(?:https?://)?(?:[-\w]*(?:\*(?=\.))?(?:\.[-\w]{1,63})+)$
见a demo on regex101.com。请注意,\w
已包含\d
。
^ # start of the string
(?:https?://)? # http:// or https://, optional
(?:[-\w]*(?:\*(?=\.))? # - or word characters, followed by a star and a dot
(?:\.[-\w]{1,63})+) # host part
$ # the end of the string
答案 1 :(得分:1)
要稍微修改你的正则表达式,你应该在子域块中的单词/数字的(现在可选的)匹配之后放置星形的匹配:
^(https?://)?(([\w\d]+(-[\w\d]+)*)*\*?\.)*(\w+)((\.\w{2,63})?)$
答案 2 :(得分:1)
我对你的正则表达式进行了以下更改:
[\\w\\d]
已更改为\\w
。 Word char(\w
)还包含一个数字(\d
)。+
更改为(-[\\w\\d]+)
后*
。 (子)域名中的-...
部分是可选的。\\*?
。所以,我的正则表达式没有加倍的反斜杠,如下所示:
^(https?://)?((\*|\w+(-\w+)*)\*?\.)*(\w+)((\.\w{2,63})?)$
答案 3 :(得分:1)
根据接受的答案和更新的要求,以下正则表达式有效:
^(https?:\/\/)?(([12]?\d?\d(\.[1-2]?\d?\d){3})|(([a-zA-Z][-\w]{0,61}\w\*?)|(\*)){1}(\.[-\w]{1,63}?)*(\.[\w]{1,63}))$