【问题标题】:Regex for name or ID名称或 ID 的正则表达式
【发布时间】:2018-06-21 08:18:01
【问题描述】:

我正在寻找一个具有以下可能性的正则表达式,其中一个字段只允许帐户 ID/ARN(以下之一):

  1. AWS 账户 ID:12 位数字
  2. AWS 账户 ARN:格式:arn:aws:iam::AWS-account-ID:root。
    这里 AWS-Account-ID 是一个 12 位数字
  3. IAM 用户 ARN:格式:arn:aws:iam::AWS-account-ID:user/user-name-1。
    这里 AWS-Account-ID 是一个 12 位数字,用户,user-name-1 是字母数字。

该字段是一个逗号分隔的列表,可以有一个或多个值。

【问题讨论】:

    标签: regex amazon-web-services regex-lookarounds


    【解决方案1】:
    1. 使用逗号对其进行标记。
    2. 对于每个令牌:
      1. 测试它是否为 12 长度,并且只包含数字(您可以使用正则表达式,但实际上不需要:^\d{12}$
      2. 否则,使用正则表达式进行测试:^arn:aws:iam::\d{12}:(?:root|user\/[A-Za-z0-9]+)$

    你可以正则表达式整个事情...^((?:\d{12}|arn:aws:iam::\d{12}:(?:root|user\/[A-Za-z0-9]+)),?\s*)*

    显然,您也可以在正则表达式中使用变量而不是替换硬代码。

    对于用户名,将任何其他合法字符添加到字符类[A-Za-z0-9],例如下划线:[A-Za-z0-9_]。您还可以提供最小和最大长度,例如最少 5 个,最多 15 个:[A-Za-z0-9]{5,15}.

    【讨论】:

    • 您能否举例说明如何用逗号分隔这些多个选项?目前,您提供的正则表达式也需要 13 位数字
    • 我不知道您使用的语言。不过,很容易找到如何做到这一点。例如google "java split string" 你会发现这个stackoverflow.com/questions/3481828/… 对于正则表达式,\d{min,max} 捕获最小和最大时间之间的任何数字。如果您没有指定最大值,它只会查找最小的固定金额。 \d{12} 只能匹配 12 位数字。
    猜你喜欢
    • 2010-09-21
    • 2011-05-11
    • 2019-08-09
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    相关资源
    最近更新 更多