今天寫的一個頁面,裏面有個效果,手機號中間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