RegEx для номера телефона без последовательных повторяющихся номеров - PullRequest
0 голосов
/ 14 декабря 2011

Мой текущий RegEx для проверки номера телефона ^\d{8,}$, который проверяет минимальную длину 8 и не допускает специальных символов или букв, и мой вопрос в том, что такое RegEx, который не допускает 9-15 последовательных повторяющихся номеров плюс текущее состояние ( минимальная длина составляет 8 и не допускается использование специальных символов или букв).

Спасибо ...

Ответы [ 3 ]

1 голос
/ 14 декабря 2011

Если я правильно понимаю ваши требования, это регулярное выражение сделает это:

/^(?!.*(\d)\1{8})\d{8,}$/

Вот закомментированная версия (в синтаксисе C #):

Regex regexObj = new Regex(@"
    # Match digits sequence  with no same digit 9 times in a row.
    ^                # Anchor to start of string
    (?!.*(\d)\1{8})  # Assert no digit repeats 9 times.
    \d{8,}           # Match eight or more digits.
    $                # Anchor to end of string", 
    RegexOptions.IgnorePatternWhitespace);
1 голос
/ 26 декабря 2011

Чтобы лучше понять регулярное выражение

ОБЪЯСНЕНИЕ УЗЛА

  ^                        the beginning of the string
   (?!                      look ahead to see if there is not:
    .*                       any character except \n (0 or more times
                         (matching the most amount possible))
     (                        group and capture to \1:
      \d                       digits (0-9)
     )                        end of \1
    \1{8}                    what was matched by capture \1 (8 times)
   )                        end of look-ahead
  \d{8,}                   digits (0-9) (at least 8 times (matching
                       the most amount possible))
 $                        before an optional \n, and the end of the
                       string
0 голосов
/ 14 декабря 2011

Итак, 11111111 (8 1 с) в порядке, но 111111111 (9 1 с) - нет?

Регулярное выражение не всегда правильный ответ.Я бы сохранил существующее ^\d{8,}$ регулярное выражение и затем проверял бы повторяющиеся цифры отдельно.Поскольку вы только (пока?) Запрещаете 10 различных чисел, вы можете просто установить хэш запрещенных номеров и проверить его:

my %forbidden = map { $_ x 9 => 1 } 0..9;

...

if ($num =~ /^\d{8,}$/ and not $forbidden{$num}) {
    # accept
}
else {
    # reject
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...