我有一个电话号码列表,但是想要根据某些条件删除其中一些电话号码。我正在尝试在ETL中设置。
假设这是联系电话号码列表:
897-54-6212
985566655
568-00-9977
000-56-8795
875-95-9999
&^*-(&-#$@)
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)
我不想要数字,如果它包含:
前三位数字不应包含000或666或900或999(例如666-77-5948应被拒绝)
如果数字中间包含00(例如945-00-8796),也应拒绝该号码
如果数字包含任何类型的特殊字符,例如@!#$%^()
这可能是一些正则表达式,以便我可以过滤这些记录的种类。我已尝试过使用子串函数,但这并没有按预期工作。
这些号码应该被拒绝:
985566655
568-00-9977
000-56-8795
&^*-(&-#$@)
666-58-5648
455-56-(0000)
有人可以帮忙吗?
答案 0 :(得分:2)
可以使用仅指定数字和短划线的正则表达式排除特殊字符:
^\d{3}-\d{2}-\d{4}$
如果您添加负面的lookbehinds以将某些数字列入黑名单,它将如下所示:
^\d{3}(?<!000|666|999|900)-\d{2}(?<!00)-\d{4}$
由于您将对照列表进行匹配,因此请确保使用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();