我需要一个正则表达式模式,该模式必须以任何顺序匹配最多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
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以使用
^[()+*#-]*(?:\d[()+*#-]*){7,40}$
请参见regex demo
详细信息:
^
-start of string [()+*#-]*
-来自list (?:\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);