将CORS网址与通配符

时间:2018-01-29 11:10:46

标签: java regex

我需要匹配满足以下要求的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

4 个答案:

答案 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}))$