S3存储桶名称的正则表达式

1 regex json amazon-s3

我正在尝试通过cloudformation创建一个s3存储桶。我尝试使用正则表达式^([0-9a-z .-]){3,63} $,但它也接受根据新的s3命名约定无效的模式“ ...”和“ ---”。(请参阅:https : //docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html)请帮忙?

Zak*_*Zak 6

规格有些混乱,但是主要标准似乎是这些:

  • 值区名称必须至少3个且不超过63个字符。
  • 值区名称必须是一系列的一个或多个标签。
  • 值区名称可以包含小写字母,数字和连字符。
  • 每个标签必须以小写字母或数字开头和结尾。
  • 相邻标签之间用单个句点(。)分隔
  • 存储桶名称不得格式化为IP地址(例如192.168.5.4)

如果是这样,则此正则表达式应匹配:

(?=^.{3,63}$)(?!^(\d+\.)+\d+$)(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)
Run Code Online (Sandbox Code Playgroud)

第一组(?=^.{3,63}$)将确保匹配长度在3到63个字符之间。

下一组(?!^(\d+\.)+\d+$)将展望禁止匹配类似于IP地址的存储桶名称。

最后一组(^(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])$)匹配零个或多个标签,后跟一个圆点(([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])\.)*,紧跟一个标签([a-z0-9]|[a-z0-9][a-z0-9\-]*[a-z0-9])

  • 对于No.6来说似乎不起作用。请参阅 https://regex101.com/r/BYxCPV/1。 (3认同)

drA*_*erT 5

以下正则表达式满足 AWS 规范,前提是您不想允许.使用存储桶名称(这是建议,否则无法启用传输加速):

^((?!xn--)(?!.*-s3alias$)[a-z0-9][a-z0-9-]{1,61}[a-z0-9])$
Run Code Online (Sandbox Code Playgroud)

这个很好,因为它允许合并到更复杂的检查中,只需用其他字符串替换^$,从而允许 ARN 检查等。

编辑:-s3alias根据 @ryanjdillon 的评论添加排除