2013-11-01 3 views
2

У меня есть следующие номера, представляющие номера телефонов:Regex Или не совпадают с

  • +16085551212
  • +16089111212

я в настоящее время получили .[0-9][2-9][0-9]{2}[2-9][0-9]{2}[0-9]{4}, который работает для обоих номеров.

Однако я не могу определить критерии для того, чтобы 6-е и 7-е число не разрешалось 11, чтобы избежать возможных ссылок 911, как показано выше. От чтения вокруг я ожидаю, что это может быть какая-то форма, но я не совсем уверен, и не знаю, как реализовать в уже существующем шаблоне.

+0

Любое объяснение того, как данные функции ответа также будут оценены :) – Mike

+0

Какой язык/системы вы используете? Это очень важно здесь, потому что на самом деле, надежные утверждения были бы каноническим решением (славное исследование!) - однако не все реализации поддерживают их. –

+0

Извините, что не включил, его выполнение C# – Mike

ответ

1

C# поддерживает lookarounds, широко, так что вы хорошо идти. Вот как использовать их в конкретном случае вы описали:

.[0-9][2-9][0-9]{2}[2-9](?!11)[0-9]{2}[0-9]{4} 
         ^^^^^^ 

Это называется отрицательного опережения утверждения.

Однако, это сделает ваше регулярное выражение гораздо более прозрачным, особенно для других:

.(?!\d*911)[0-9][2-9][0-9]{2}[2-9][0-9]{2}[0-9]{4} 
^^^^^^^^^^ 
+0

Будут приняты в ближайшее время, сделают фоновое чтение, также связанное в оригинальном посте, для дальнейшего понимания, спасибо! – Mike

1

Я предполагаю, что вы ищете способ исключить из числа 911.

Вы можете сделать это с помощью регулярных выражений, как это: (?!.+911.+)\+1[2-9][0-9]{2}[2-9][0-9]{2}[0-9]{4}

+0

Критерии только хотят его в позиции, указанной в исходном вопросе, это вопрос обучения с 3 требованиями, пытаясь получить их все в одном выражении регулярного выражения – Mike

+0

Спасибо, Майк, см. Ответ acheong87 в таком случае. –

Смежные вопросы