正则表达式允许9个数字,但阻止超过4个重复的数字

时间:2018-11-14 18:56:22

标签: javascript regex

我正在寻找有关查找正则表达式的帮助,该正则表达式要求确切地包含9个数字,但连续阻止超过4个重复的数字。如果输入的字符少于或少于9个,则会失败。

示例为:

  • 123456789-允许
  • 111156789-允许
  • 121314151-允许
  • 111116789-不允许
  • 123499999-不允许

我没有运气尝试过以下内容:

/^(?!.*(\d)\1{5})(\d{9})*$/

3 个答案:

答案 0 :(得分:6)

阻止任何数字,该数字在行中重复5次:
/^(?:(\d)(?!\1{4})){9}$/

说明:

(\d)-第一组,与任何数字匹配。
\1-重复第一组内容。
(\d)(?!\1{4})-块数字,后跟4个相同的数字。
(?:(\d)(?!\1{4})){9}-仅匹配9个模式(每个模式仅包含一位数字)

示例:

let reg = /^(?:(\d)(?!\1{4})){9}$/;

console.log(reg.test("123456789"));  // -> true
console.log(reg.test("111116789"));  // -> false
console.log(reg.test("12345678"));   // -> false
console.log(reg.test("1234567890")); // -> false

答案 1 :(得分:0)

/(?=(?!(\d)\1{4}))^\d{9}$/

说明:

(\d)\1{4}-5个相同数字的重复数字

(?!(\d)\1{4})-不匹配5个相同的数字

(?=(?!(\d)\1{4}))-确保表达式不包含相同数字的5位数字,然后返回原始起点以进行进一步匹配

^\d{9}$-匹配一个总计9位数的表达式

答案 2 :(得分:0)

您可以使用此正则表达式,仅当任何数字重复至少5次时才拒绝匹配。

/^(?!\d*(\d)\1{4})\d{9}$/

说明:

  • ^->字符串开头
  • (?!\d*(\d)\1{4})->负向查找,如果字符串中的任何数字重复至少五次,则拒绝匹配。
  • \d{9}->精确匹配九个数字
  • $->字符串结尾

Demo

这里是相同的javascript代码,

let regex = /^(?!\d*(\d)\1{4})\d{9}$/;
var strs = ["123456789","111156789","121314151","111116789","123499999","888888888","199999991","123327333"];

for (var i=0;i<strs.length;i++) {
    console.log(strs[i] + " --> " + regex.test(strs[i]));
}