JS實(shí)現(xiàn)手機(jī)號(hào)脫敏的方法詳解
1、脫敏的含義
脫敏(Data Masking)指的是通過(guò)特定的技術(shù)手段對(duì)敏感數(shù)據(jù)進(jìn)行處理,使其不再直接暴露給用戶或系統(tǒng),防止敏感信息泄露,通常在測(cè)試、開(kāi)發(fā)、數(shù)據(jù)處理等場(chǎng)景中使用。脫敏后的數(shù)據(jù)應(yīng)該保留其格式和特征,但不應(yīng)包含敏感信息。
常見(jiàn)的脫敏方式
- 字符替換:將敏感信息的一部分替換為特殊字符(如
*
、X)。 - 數(shù)據(jù)加密:通過(guò)
加密算法
將敏感數(shù)據(jù)加密后存儲(chǔ)或傳輸。 - 數(shù)據(jù)脫標(biāo):刪除或用替代值替換敏感數(shù)據(jù)。
- 局部脫敏:僅對(duì)
敏感數(shù)據(jù)
的部分進(jìn)行替換
,而保留其他部分。
就是下面這種效果,這個(gè)在現(xiàn)在的生活中也是很常見(jiàn)的東西了
2、前端處理手機(jī)號(hào)脫敏的方式
2.1 字符串的replace搭配正則
核心點(diǎn)
- String.prototype.replace()
- 正則表達(dá)式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <input type="text" id="phone" value="13012345678"> <button id="btn">點(diǎn)擊</button> <br> 脫敏后數(shù)據(jù):<span id="result"></span> <script> document.querySelector('#btn').onclick = function () { let phone = document.querySelector('#phone').value let newPhone = phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') document.querySelector('#result').innerHTML = newPhone } </script> </body> </html>
在此處, (\d{3})\d{4}(\d{4}) 就是核心。這里的 $1 ,$2 只會(huì)匹配上以 () 包裹的東西 ,所以 $2 就是5678 , 不是1234。$1 指的就是第一個(gè)匹配上的大括號(hào),$2 指的就是 第二個(gè)匹配上的大括號(hào)
$1 ==> (\d{ 3}) ==> 130 $2 ==> (\d{4}) ==> 5678
2.2 字符串的slice
核心點(diǎn)
核心點(diǎn)就是利用了 字符串截取的方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <input type="text" id="phone" value="13012345678"> <button id="btn">點(diǎn)擊</button> <br> 脫敏后數(shù)據(jù):<span id="result"></span> <script> document.querySelector('#btn').onclick = function () { let phone = document.querySelector('#phone').value // 2、第二種方法 slice // slice(0,3) 截取前3位 // slice(-4) 11+(-4) = 7 ,從第八個(gè)字符截取,一直到最后 let newPhone = phone.slice(0, 3) + '****' + phone.slice(-4) document.querySelector('#result').innerHTML = newPhone } // $1 ==> (\d{ 3}) ==> 130 // $2 ==> (\d{4}) ==> 5678 </script> </body> </html>
2.3 數(shù)組的splice
核心點(diǎn)
- 先轉(zhuǎn)成數(shù)組
- 利用數(shù)組的 splice 方法,先刪除四個(gè),然后再插入 四個(gè)星號(hào)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <input type="text" id="phone" value="13012345678"> <button id="btn">點(diǎn)擊</button> <br> 脫敏后數(shù)據(jù):<span id="result"></span> <script> document.querySelector('#btn').onclick = function () { // 3、數(shù)組拼接方法 let phone = document.querySelector('#phone').value let arr = phone.split('') arr.splice(3, 4, '****') let newPhone = arr.join('') document.querySelector('#result').innerHTML = newPhone } // $1 ==> (\d{ 3}) ==> 130 // $2 ==> (\d{4}) ==> 5678 </script> </body> </html>
其實(shí)還有其他方法在此不列舉了,但還是第一種, 是最常見(jiàn)的方式
3、replace的特殊特?fù)Q模式
const str = "Hello dgg and world!"; const regex = /(dgg)/; const result = str.match(regex); console.log(result); if (result) { const beforeMatch = str.slice(0, result.index); // 匹配前的文本 const afterMatch = str.slice(result.index + result[0].length); // 匹配后的文本 console.log("匹配前的文本:", beforeMatch); // Hello, console.log("匹配后的文本:", afterMatch); // ! console.log("匹配到的文本:", result[0]); // Hello, world! }
這個(gè)result 返回的是一個(gè)數(shù)組 ,
- 數(shù)組第一項(xiàng):這個(gè)正則匹配到的整個(gè)字符串
- 數(shù)組第二項(xiàng):第一個(gè)捕獲的組
- 數(shù)組第三項(xiàng):第二個(gè)捕獲的組
- 以此類推
- index:匹配開(kāi)始的位置
- input 原始輸入字符串
到此這篇關(guān)于JS實(shí)現(xiàn)手機(jī)號(hào)脫敏的方法詳解的文章就介紹到這了,更多相關(guān)JS手機(jī)號(hào)脫敏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原生javascript制作的拼圖游戲?qū)崿F(xiàn)方法詳解
這篇文章主要介紹了原生javascript制作的拼圖游戲?qū)崿F(xiàn)方法,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript制作拼圖游戲的相關(guān)步驟、原理、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02JavaScript運(yùn)行過(guò)程中的“預(yù)編譯階段”和“執(zhí)行階段”
這篇文章主要介紹了JavaScript運(yùn)行過(guò)程中的“預(yù)編譯階段”和“執(zhí)行階段”的相關(guān)資料,需要的朋友可以參考下2015-12-12詳解js產(chǎn)生對(duì)象的3種基本方式(工廠模式,構(gòu)造函數(shù)模式,原型模式)
本篇文章主要介紹了js產(chǎn)生對(duì)象的3種基本方式(工廠模式,構(gòu)造函數(shù)模式,原型模式) ,具有一定的參考價(jià)值,有興趣的可以了解一下2017-01-01js無(wú)法獲取到html標(biāo)簽的屬性的解決方法
下面小編就為大家?guī)?lái)一篇js無(wú)法獲取到html標(biāo)簽的屬性的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07javascript setTimeout()傳遞函數(shù)參數(shù)(包括傳遞對(duì)象參數(shù))
由于需要,我要用到setTimeout()并且在里邊的函數(shù)參數(shù)傳遞一個(gè)參數(shù),就像這樣setTimeout("fun(參數(shù))", 1000)。但是以我這種寫(xiě)法,js會(huì)報(bào)錯(cuò),說(shuō)‘參數(shù)’未定義。2010-04-04uniapp使用uni-imei插件獲取手機(jī)的設(shè)備號(hào)
uniapp框架是一款開(kāi)發(fā)跨平臺(tái)應(yīng)用的工具,它支持iOS、Android以及Web等多個(gè)平臺(tái),在這些平臺(tái)中,uniapp可以訪問(wèn)某些設(shè)備的硬件信息,這篇文章主要給大家介紹了關(guān)于uniapp使用uni-imei插件獲取手機(jī)設(shè)備號(hào)的相關(guān)資料,需要的朋友可以參考下2024-01-01D3.js 實(shí)現(xiàn)帶伸縮時(shí)間軸拓?fù)鋱D的示例代碼
這篇文章主要介紹了D3.js 實(shí)現(xiàn)帶伸縮時(shí)間軸拓?fù)鋱D的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01JavaScript設(shè)計(jì)模式之代理模式詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript設(shè)計(jì)模式之代理模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06