今天写的一个页面,里面有个效果,手机号中间4位数字被替换了星号,这个效果挺简单的,实现的方法有多种,既可以是字符串截取也可以用正则 ^_^
要达到的效果如下:
135****2627
JS代码:
方法 ① :字符串截取+拼接
var phone = '13500001111';
phone.substr(0, 3) + '****' + phone.substr(7, 11);
这种方法的原理是先截取字符串的前3位字符,拼接上中间的4个*号,再截取字符串的后4位字符。substring()函数也是可以的哦。
将上面的写成个方法,以后可以复用。
function formatPhone(phone) {
return phone.substr(0, 3) + '****' + phone.substr(7, 11);
}
以后需要调用的时候把手机号码传进去就可以了。
注意:phone的类型是字符串哦,怎么你想直接传入数字?那稍微修改下好了。
function formatPhone(phone) {
if (typeof phone == 'number') {
phone = phone.toString();
}
return phone.substr(0, 3) + '****' + phone.substr(7, 11);
}
判断下参数的类型是不是数值型,是的就转换成字符串型,如果你还想严谨点,可以再判断下其他类型,确保是字符串型才执行代码。
有没有觉得方法①比较水呢?那就用正则装装逼吧。
方法 ②:正则表达式替换
function formatPhone(phone) {
return phone.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
}
原理是先匹配前3个数字,将匹配到的值给$1,然后匹配中间4个数字,再匹配最后4个数字给$2。
正则不懂的童鞋可以戳这里《正则表达式简单入门》
小结:中间4位替换成*号,为什么不是其他位置呢,首先你要知道手机号的规则,我国使用的手机号码是11位的,前3位是号码段,中间4位是地区编码,最后4位是用户编码。你要替换多少位都没关系,至少让人知道这是个手机号码就可以了,不过替换中间4位,是约定俗成的哦。
PHP:
顺便说说在PHP中怎么替换吧。
<?php
$phone = "13511112222";
$pattern = "/(\d{0,3})\d{4}(\d{4})/";
$replacement = "\$1****\$2";
print preg_replace($pattern, $replacement, $phone);
?>
<?php
$phone = "13264309555";
echo substr_replace($phone,"****", 3, 4);
?>
<?php
echo substr($phone, 0, 3)."****".substr($phone, 7, 4);
?>
<?php
$identity= "410727200107022658"; //身份证格式
echo substr_replace($identity,"****", 5, 9);
?>
Smarty:
<{'13511112222'|regex_replace:"/(\d{0,3})\d{4}(\d{4})/":"\$1****\$2"}>
总结:上面列举的方法不仅可以替换手机号,像身份证号、电话号码、IP等,甚至用户名这些都是可以的,只不过正则要有针对的去写咯,这里就不在说了,有时间的话都写个例子出来。
原文地址:http://www.mingsixue.com/blog/effect/JS-phone-to-asterisk.html