【问题标题】:Regex to match pattern of at least 7 digits and any amount of special characters in any order正则表达式以任何顺序匹配至少 7 位数字和任意数量的特殊字符的模式
【发布时间】:2018-08-13 11:03:42
【问题描述】:

我需要一个正则表达式模式,该模式将匹配至少 7 个数字(最多 40 个)和 0 个或多个这些字符 ()+-*# 以任意顺序排列的模式。

到目前为止,我有这个:^[(?=.*\d)(?=.*[+\-*()#\]*)]{7,40}$,但它不符合所有要求。

一些测试:

1234 // false needs 7 digits

1234563 // true 7 digits and 0 special chars

(66)666-666 // true 7 digits and 0 or more special

(3)3-33 // false less than 7 digits

123456789009876543211234567890098765432112345 // false more than 40 digits

()-+*#34345789 // true 7 digits and 0 or more special chars

)(*&^%$£@7655432 // false 7 digits but special chars not in list

任何帮助将不胜感激。

【问题讨论】:

  • 第三个条件不应该为假吗?有8位数字。
  • @UnbearableLightness - 这就是为什么我认为它是 7-40,而不是 7。
  • 我已经编辑了问题以供澄清

标签: javascript html regex


【解决方案1】:

你可以使用

^[()+*#-]*(?:\d[()+*#-]*){7,40}$

regex demo

详情

  • ^ - start of string
  • [()+*#-]* - 来自 list 的 0 个或多个特殊字符
  • (?:\d[()+*#-]*){7,40} - 一个数字出现 7 到 40 次,后跟列表中的 0 个或多个特殊字符
  • $ - end of string

如果您在pattern 属性中使用它,您可以删除^$,因为它们是由HTML5 引擎自动添加的。

【讨论】:

    【解决方案2】:

    如果您需要精确匹配七个数字而忽略这些不同的字符,您可以使用以下正则表达式来完成:

    ^[()+\-*#]*(?:\d[()+\-*#]*){7}$
    

    对于 7-40,您将使用 {7,40} 而不是 {7}

    这让文本以任何特殊字符(或无)开头,然后需要至少一个数字,后跟任何特殊汽车(或无),七次。

    例子:

    function test(str, expect) {
      var result = /^[()+\-*#]*(?:\d[()+\-*#]*){7,40}$/.test(str);
      console.log(str, result, !result == !expect ? "OK" : "ERROR");
    }
    
    test("1234", false);
    test("1234563", true);
    test("(66)666-666", true);
    test("(3)3-33", false);
    test("123456789009876543211234567890098765432112345", false);
    test("()-+*#34345789", true);
    test(")(*&^%$£@7655432", false);

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多