【问题标题】:Regex for mobile number contain at least 3 unique digits手机号码的正则表达式至少包含 3 个唯一数字
【发布时间】:2018-05-03 13:26:45
【问题描述】:

我需要一个正则表达式来检查字符串的以下条件:-

1) 它只包含数字 (0-9) 2) 字符串必须包含三个唯一数字 3) 字符串中不能有空格 4) 字符串长度必须为10。

有效字符串示例 “1234567890” “1122557890” "7878787808"

无效的字符串:- “7878787878” "1111122222"

【问题讨论】:

  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出以及您实际获得的输出(控制台输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查tourHow to Ask
  • 分享您的尝试,我很乐意为您提供帮助
  • 我使用了以下正则表达式 ^(\d)\1*+(?!.*\1)(\d)\2*+(\d)\3*+$ 它是给我结果的字符串只包含 3 个唯一数字,如“123”,“11222333”,但不是根据我的需要
  • 空格、数字和长度很容易用正则表达式处理。为什么你不能检查正则表达式之外数字的唯一性?
  • @FlexsinTech 您能否将您尝试过的正则表达式添加到您的问题中?

标签: javascript regex mobile


【解决方案1】:

你可以做的是匹配 10 位数字 ^[0-9]{10}$ 从字符串的开头 ^ 到结尾 $ 和第一个 test 如果成功。

如果是这种情况,您只能从字符串中获取唯一值,并且如果该计数等于或大于 3,那么您就有了匹配项。

有多种方法可以从数组中删除重复值。对于这个例子,我使用了一个方法from this page

let strings = [
  "1234567890",
  "1122557890",
  "7878787808",
  "7878787878",
  "1111122222"
];
let pattern = /^[0-9]{10}$/;

strings.forEach((s) => {
  if (pattern.test(s)) {
    let a = s.split("").filter(function(x, i, a) {
      return a.indexOf(x) === i;
    });
    if (a.length >= 3) {
      console.log("Valid: " + s);
    }
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2017-02-06
    • 1970-01-01
    • 2013-06-24
    • 2013-05-29
    相关资源
    最近更新 更多