我有这个regex用于验证电话号码.
^\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})$
Run Code Online (Sandbox Code Playgroud)
(是的,我知道它并不完美,但我并不在乎).我只是用它来用另一个字符串替换电话号码,比如###删除敏感信息.所以误报很好.
它在我搜索的字符串只是一个电话号码时有效.这有效:
String PHONE_PATTERN = "^\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})$";
String phone = "123-123-1234";
System.out.println(s.replaceAll(PHONE_PATTERN, "###")); //prints '###'
Run Code Online (Sandbox Code Playgroud)
但是对于周围的文本,它不起作用:
String PHONE_PATTERN = "^\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})$";
String phone = "some other text 123-123-1234";
System.out.println(s.replaceAll(PHONE_PATTERN, "###"));
Run Code Online (Sandbox Code Playgroud)
通过不起作用,我的意思是文本打印不变.
我需要更改我的正则表达式才能使其工作,以便打印第二个示例
some other text ###
Run Code Online (Sandbox Code Playgroud)
而不是锚^和$使用\b(字边界):
String PHONE_PATTERN = "\\b\\(?(\\d{2,3})\\)?[-(). ]?(\\d{2,3})[-(). ]?(\\d{4})\\b";
Run Code Online (Sandbox Code Playgroud)