java正则表达式屏蔽手机号码
现在有需求需要把帖子、文章里的手机号码屏蔽,都用星号*替换掉,网上找了下,发现他们的方法会把超过11位的数字也匹配出来,并且替换掉前11位,导致不该屏蔽的被屏蔽了,最常见的就是url里的长串数字被误杀,于是我改良了一下,jsp代码如下:
[blackwhite]<%
StringBuffer bstr = new StringBuffer();
String title = "《1234567890》《18888888888》《11113710170895》《88888888888》";
Pattern p_phone = Pattern.compile("(1[0-9]{10,})");/*把1开头11位及以上的数字都匹配出来*/
Matcher m_phone = p_phone.matcher(title);
out.println(title);
out.println("<br>");
while(m_phone.find()){
if(m_phone.group(1).length()==11)/*只把1开头且正好11位的数字替换掉*/
m_phone.appendReplacement(bstr,"***********");
}
m_phone.appendTail(bstr);
out.println(bstr);
%>[/blackwhite]
运行结果:
《1234567890》《18888888888》《11113710170895》《88888888888》
《1234567890》《***********》《11113710170895》《88888888888》