regex 禁止两个交替数字重复的正则表达式

dzhpxtsq  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(89)

我想做一个正则表达式来测试像这样的重复

0101010101
2323232323
1313131313
4848484848

这就是我目前所做的,但它不起作用

var noAlternateRepeatRegex = /^(?!.*\\d{2}\\d{2}|.*00|.*11|.*22)$/;

你能告诉我禁止两个交替数重复的正则表达式吗?

编辑以解决评论中的澄清要求。

我用JavaScript编写代码来验证输入字段中输入的电话号码。
它使用的是JavaScript正则表达式引擎。
这是我的职责。

function validatePhoneNumber() {
    var telephoneValue = telephoneInput.val();

    // Use a regular expression to check the 10-digit phone number
    var regex = /^\d{10}$/;

    // checks that the phone number does not contain a sequence of digits repeated more than 9 times, prohibiting the digits 0 to 9 from repeating more than 9 times.
    var noRepeatRegex = /^(?!.*(0|1|2|3|4|5|6|7|8|9)\1{9})/;

    // verifies that no sequence of two alternating digits is repeated more than 5 times in the telephone number.
    var noAlternateRepeatRegex = /^(?!.*\\d{2}\\d{2}|.*00|.*11|.*22)$/;

    if (!regex.test(telephoneValue) || !noRepeatRegex.test(telephoneValue) || !noAlternateRepeatRegex(telephoneValue)) {
        // code
        return;
    }

    // The phone number is valide
    // code
 }

我还没有收到任何具体的规则来这样做。我的客户要求我禁止以下号码。

0101010101
0123456789
0102030405
1111111111
2222222222
3333333333

我推断规则是必须禁止

  • 所有的数字都是一样的,比如“111111111”。
  • 数字按升序或降序连续,例如“0123456789”。
  • 这些数字按顺序重复,如“0101010101”、“0102030405”等。
8ljdwjyq

8ljdwjyq1#

如果字符串匹配下面的正则表达式,则存在一对与下面的一对连续字符不同的连续字符,这意味着字符串不完全由重复的字符对组成。

(..)(?!\1)..

Demo
我已经假定已知字符串完全由数字组成。

20jt8wwn

20jt8wwn2#

除非这是一个关于正则表达式的学术问题,或者绝对需要使用它们,否则我会选择一个命令式解决方案,因为解析是微不足道的。在这里,自定义实现可以更有效。这是用Java写的。

  • 它首先检查String是否为奇数或长度为2。如果是,它不能是一个重复的有向图,所以返回true。
  • 如果两个有向图不同,或者其中一个的两位数相同,则返回true。
  • 如果循环结束,返回false。
Predicate<String> isValid = str -> {
    if ((str.length() & 1) == 1 || str.length() == 2) {
        return true; // is odd or single digraph
    }
    String p1 = str.substring(0, 2);
    for (int i = 2; i < str.length(); i += 2) {
        String p2 = str.substring(i, i + 2);
        if (!p1.equals(p2) || p1.charAt(0) == p1.charAt(1)) {
            return true;
        }
        p1 = p2;
    }
    return false;
};

String[] tests = {"01","010","01010101","23232323","44444444",
                    "22332233","01220123","13132313","48484848"};
for (String str : tests) {
    System.out.printf("%-8s --> %s%n", str,
            isValid.test(str) ? "Valid." : "Not valid.");
}

指纹

01       --> Valid.
010      --> Valid.
01010101 --> Not valid.
23232323 --> Not valid.
44444444 --> Valid.
22332233 --> Valid.
01220123 --> Valid.
13132313 --> Valid.
48484848 --> Not valid.

相关问题