正则表达式可以匹配至少7位数字和任意数量的特殊字符的模式

时间:2018-08-13 11:03:42

标签: javascript html regex

我需要一个正则表达式模式,该模式必须以任何顺序匹配最多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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用

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

请参见regex demo

详细信息

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

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

答案 1 :(得分: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);