2016-08-09 2 views
0

У меня есть список телефонных номеров, но вы хотите удалить некоторые из них на основе какого-либо условия. Я пытаюсь настроить в ETL.Regex для фильтрации контактных номеров

Скажем, это список контактных номеров:

897-54-6212 
985566655 
568-00-9977 
000-56-8795 
875-95-9999 
&^*-(&-#[email protected]) 
111-85-4568 
222-56-6542 
333-56-4589 
444-48-8978 
555-48-8978 
666-58-5648 
777-58-5647 
888-86-8978 
456-33-5685 
485-44-4568 
465-55-8523 
485-66-7824 
468-77-5948 
854-88-2358 
785-78-1111 
588-64-2222 
078-05-1120 
455-56-(0000) 

И я не хочу, цифры, как, если он содержит:

  1. Первые три цифры не должны содержит 000 или 666 или 900 или 999 (например, 666-77-5948 должны быть отклонены)

  2. Номер также должен быть отклонён, если он содержит 00 между ними (например, 945-00-8796)

  3. Если число содержит какой-либо специальный символ, как @!#$%^()

Возможно ли это вид какой-то регулярное выражение, так что я мог фильтровать вид этих записей. Я пробовал функцию подстроки, но это не сработало, как ожидалось.

Это число должно быть отвергнуто:

985566655 
568-00-9977 
000-56-8795 
&^*-(&-#[email protected]) 
666-58-5648 
455-56-(0000) 

Может кто-нибудь помочь?

+1

Чтобы быть ясным, можете ли вы указать, какие номера недействительны в этом списке? – 4castle

+1

Какой аромат регулярного выражения? – dawg

+0

@ 4castle, dwag ... вопрос обновлен. – Kate

ответ

2

специальных символов можно исключить, используя регулярное выражение, которое определяет только цифры и символы:

^\d{3}-\d{2}-\d{4}$ 

Если добавить отрицательные просмотра назад в черный список определенных номеров, она будет выглядеть следующим образом:

^\d{3}(?<!000|666|999|900)-\d{2}(?<!00)-\d{4}$ 

Regex101 Demo

Так как вы будете это соответствие со списком, убедитесь, перекомпилировать регулярное выражение, используя Pattern объект. Не используйте String#matches() в цикле.

import java.util.regex.Pattern; 
... 
Pattern phone = Pattern.compile("^\\d{3}(?<!000|666|999|900)-\\d{2}(?<!00)-\\d{4}$"); 
... 
boolean isValid = phone.matcher(inputString).matches(); 
+0

@ 4castle ... Что здесь? – Kate

+0

В Java вы должны избегать обратных косых черт в строковых литералах. Вам нужно будет добавить дополнительную обратную косую черту ко всем обратным косым чертам в регулярном выражении. '\ d' означает« цифра »в регулярном выражении. Как строковый литерал, он становится '\\ d'. – 4castle

+0

, пожалуйста, проверьте этот URL-адрес http://prnt.sc/c3dlu5 – Kate

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