我有电话号码清单,但想根据情况删除其中一些。我正在尝试在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)
有人可以帮忙吗?
最佳答案
可以使用仅指定数字和破折号的正则表达式排除特殊字符:
^\d{3}-\d{2}-\d{4}$
如果添加否定的lookbehinds将某些数字列入黑名单,则它看起来像这样:
^\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();
关于java - 正则表达式过滤联系电话,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38841603/