【问题标题】:Regex for at least 10 alphanumeric characters that contain at least 3 digits至少 10 个包含至少 3 位数字的字母数字字符的正则表达式
【发布时间】:2018-03-09 12:26:20
【问题描述】:

我正在尝试构建一个正则表达式,它只允许包含至少 10 个字母数字字符且包含至少 3 个数字的字符串。

例如:

X6JV2YUW8T => True
JN1H86LEKA => True
111JEJE134 => True
A111111111 => True
ABCDEFGHIJ => False
0123456789 => False

在此先感谢

【问题讨论】:

  • 为什么最后一个是False
  • “我正在尝试构建一个正则表达式” - 好吧,这就是你的问题。首先不应该使用正则表达式来进行这样的检查(“至少 x 数量的 y”)。
  • @Phylogenesis 我猜他希望它是数字+字母,而不仅仅是数字。
  • @revilheart 我意识到这可能是我们所需要的。它应该是一个指向 OP 的指针,如果不弄清楚他们的规则实际上是什么,他们真的无法做他们想做的事。
  • @Phylogenesis,正如 revilheart 所说,我希望它是数字+字母。不仅仅是数字。抱歉解释不好

标签: javascript html regex validation input


【解决方案1】:

如果您需要至少 10 个字母数字字符(字符和数字)和至少 3 个数字,您可以使用 2 个正数 lookaheads 来检查 3 个数字和一个字母数字字符(使用不区分大小写的标志 /i 在js模式):

^(?=(?:[a-z0-9]*[a-z]))(?=(?:[a-z0-9]*[0-9]){3})[a-z0-9]{10,}$

这将匹配:

  • ^ 字符串开头
  • (?= 积极前瞻
    • (?:非捕获组
    • [a-z0-9]*[a-z] 匹配零个或多个字母数字字符,然后匹配 1 个字母数字字符
    • )关闭无捕获组
  • ) 关闭前瞻
  • (?= 正向前瞻
    • (?:[a-z0-9]*[0-9]){3} 匹配零个或多个字母数字字符,然后匹配一个数字 3 次
  • ) 仔细看看
  • [a-z0-9]{10,} 至少匹配一个字母数字字符 10 次
  • $字符串结束

const strings = [
  "X6JV2YUW8T",
  "JN1H86LEKA",
  "111JEJE134",
  "A111111111",
  "ABCDEFGHIJ",
  "0123456789"
];
const pattern = /^(?=(?:[a-z0-9]*[a-z]))(?=(?:[a-z0-9]*[0-9]){3})[a-z0-9]{10,}$/i;

strings.forEach(s => {
  console.log(s + " :" + pattern.test(s));
});

【讨论】:

    【解决方案2】:

    你可以使用^(?=(.*\d){3})(?=(.*[a-zA-Z]))[a-zA-Z0-9]{10,}$

    ^                                             $     The whole string
     (?=(.*\d){3})                                      Should contain at least three digits
                  (?=(.*[a-zA-Z]))                      And contain at least one letter
                                  [a-zA-Z0-9]{10,}      And be at least 10 alphanumeric characters
    

    const examples = [
        'X6JV2YUW8T',
        'JN1H86LEKA',
        '111JEJE134',
        'A111111111',
        'ABCDEFGHIJ',
        '0123456789',
    ];
    
    const regex = /^(?=(.*\d){3})(?=(.*[a-zA-Z]))[a-zA-Z0-9]{10,}$/;
    
    examples.forEach(example => {
        console.log(`${example} => ${regex.test(example)}`)
    });

    注意:最后一个返回 true,因为它匹配基于问题的预期语法。

    【讨论】:

    • 正如@revilheart 之前所说,我希望它是数字+字母。不仅仅是数字。抱歉解释不好
    • @HKHAIT:没问题,答案已修复。
    猜你喜欢
    • 2012-05-30
    • 2022-12-03
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多