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

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

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

  1. 0101010101
  2. 2323232323
  3. 1313131313
  4. 4848484848

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

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

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

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

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

  1. function validatePhoneNumber() {
  2. var telephoneValue = telephoneInput.val();
  3. // Use a regular expression to check the 10-digit phone number
  4. var regex = /^\d{10}$/;
  5. // 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.
  6. var noRepeatRegex = /^(?!.*(0|1|2|3|4|5|6|7|8|9)\1{9})/;
  7. // verifies that no sequence of two alternating digits is repeated more than 5 times in the telephone number.
  8. var noAlternateRepeatRegex = /^(?!.*\\d{2}\\d{2}|.*00|.*11|.*22)$/;
  9. if (!regex.test(telephoneValue) || !noRepeatRegex.test(telephoneValue) || !noAlternateRepeatRegex(telephoneValue)) {
  10. // code
  11. return;
  12. }
  13. // The phone number is valide
  14. // code
  15. }

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

  1. 0101010101
  2. 0123456789
  3. 0102030405
  4. 1111111111
  5. 2222222222
  6. 3333333333

我推断规则是必须禁止

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

8ljdwjyq1#

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

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

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

20jt8wwn

20jt8wwn2#

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

  • 它首先检查String是否为奇数或长度为2。如果是,它不能是一个重复的有向图,所以返回true。
  • 如果两个有向图不同,或者其中一个的两位数相同,则返回true。
  • 如果循环结束,返回false。
  1. Predicate<String> isValid = str -> {
  2. if ((str.length() & 1) == 1 || str.length() == 2) {
  3. return true; // is odd or single digraph
  4. }
  5. String p1 = str.substring(0, 2);
  6. for (int i = 2; i < str.length(); i += 2) {
  7. String p2 = str.substring(i, i + 2);
  8. if (!p1.equals(p2) || p1.charAt(0) == p1.charAt(1)) {
  9. return true;
  10. }
  11. p1 = p2;
  12. }
  13. return false;
  14. };
  15. String[] tests = {"01","010","01010101","23232323","44444444",
  16. "22332233","01220123","13132313","48484848"};
  17. for (String str : tests) {
  18. System.out.printf("%-8s --> %s%n", str,
  19. isValid.test(str) ? "Valid." : "Not valid.");
  20. }

指纹

  1. 01 --> Valid.
  2. 010 --> Valid.
  3. 01010101 --> Not valid.
  4. 23232323 --> Not valid.
  5. 44444444 --> Valid.
  6. 22332233 --> Valid.
  7. 01220123 --> Valid.
  8. 13132313 --> Valid.
  9. 48484848 --> Not valid.
展开查看全部

相关问题