1

CORS 原点规范要求原点具有以下可能性:

Origin: <scheme>://<hostname>
Origin: <scheme>://<hostname>:<port>

我想要一个可以将来源与上述标准匹配的正则表达式;要匹配的示例域:

http://ex.bar.com
http://www.ex.com
https://ex.bar.com
https://ex.bar.ext:8080

我尝试过的是以下内容:

(^(http|https):\/\/)|(www)|(?!.*(-)\1+)(?:[a-zA-Z]{1}[a-zA-Z0-9-]{0,62}(?<!-)\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$:{0,61}

但这也匹配以“www”开头的域,我不需要并且与端口不匹配。

4

1 回答 1

1

我通过构建这个正则表达式得到了这个工作:

^((http|https):\/\/)(?!.*(-)\1+)(?:[a-zA-Z]{1}[a-zA-Z0-9-]{0,62}(?<!-)\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$|^((http|https):\/\/)(?!.*(-)\1+)(?:[a-zA-Z]{1}[a-zA-Z0-9-]{0,62}(?<!-)\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]+:([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$

第一部分匹配http://www.ex.comhttps://go.ex.com

^((http|https):\/\/)(?!.*(-)\1+)(?:[a-zA-Z]{1}[a-zA-Z0-9-]{0,62}(?<!-)\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$

第二部分是与第 1 部分相结合的端口号检查,以将域与给定的端口号相匹配,即。

^((http|https):\/\/)(?!.*(-)\1+)(?:[a-zA-Z]{1}[a-zA-Z0-9-]{0,62}(?<!-)\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]

结合

+:([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$

我相信这可能是执行此操作或代表上述内容的更好方法,如果有人知道,请发布。谢谢!

工作正则表达式(虽然需要修剪):

^(\\*$)|^((http|https)://)(?!.*(-)\\1+)(?:[a-zA-Z][a-zA-Z0-9-]{0,62}(?<!-)\\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$|^((http|https)://)(localhost|(?!.*(-)\\1+)(?:[a-zA-Z][a-zA-Z0-9-]{0,62}(?<!-)\\.)+[a-zA-Z][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])+:([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
于 2022-02-22T17:29:35.627 回答