[英]How to mask letters and numbers of a string
我有以下與數字完美搭配的內容,但我也不知道如何讓它與字母一起使用。
var word = "4556364607935616";
function mask() {
if (word.length <= 4) {
return word;
} else {
var masked =
word.substring(0, word.length - 4).replace(/\d/g, "#") +
word.substring(word.length - 4, word.length);
return masked;
}
}
我猜\\d
目標數字? 我不確定在哪里可以找到這種事情的參考指南。 任何幫助將不勝感激!
您需要做的就是稍微改變您的正則表達式,使其也適用於字母。 因此,將/\\d/g
更改為/[az\\d]/gi
,其中:
[az\\d]
匹配 a 到 z 范圍內的字符以及數字和i
標志確保小寫和大寫字母都匹配。片段:
var word = "4f563a46jy7u35616"; function mask() { if (word.length <=4) { return word } else { var masked = word.substring(0, word.length - 4).replace(/[az\\d]/gi,"#") + word.substring(word.length - 4, word.length) return masked; } } console.log(mask(word));
有效的解決方案是不屏蔽字符串,而是構建一個具有提供長度的新字符串
var word = "4556364607935616";
function mask() {
var LENGTH = 4
var CHAR = '#'
if (word.length <= LENGTH) {
return word
}
var leftSideLength = word.length - LENGTH
var result = ''
while (leftSideLength--) result += CHAR
return result + word.substring(word.length - 4, word.length)
}
下面顯示的性能優勢
var word = "4556364607935616"; function maskNotRegex() { var LENGTH = 4 var CHAR = '#' if (word.length <= LENGTH) { return word } var leftSideLength = word.length - LENGTH var result = '' while (leftSideLength--) result += CHAR return result + word.substring(word.length - 4, word.length) } // Credit: Angel Politis's anwer on this Post function maskRegex() { if (word.length <= 4) { return word } else { var masked = word.substring(0, word.length - 4).replace(/[az\\d]/gi, "#") + word.substring(word.length - 4, word.length) return masked; } } // Performance test // Credit: https://stackoverflow.com/a/17943511/2308005 var iterations = 1000000; console.time('Using regex'); for (var i = 0; i < iterations; i++) { maskRegex(word); }; console.timeEnd('Using regex') console.time('Not using regex'); for (var i = 0; i < iterations; i++) { maskNotRegex(word); }; console.timeEnd('Not using regex')
要獲取有關正則表達式性能的更多信息,請閱讀codinghorror 帖子
帶有教程的 RegExp 參考指南: http : //www.regular-expressions.info/
RegExp Playground : https : //regexr.com/ (學習、構建和測試正則表達式的在線工具)
如果您需要避免替換破折號-
等,請使用單詞字符\\w
(包括下划線):
var word="abc-364-079-5616", masked=word.replace(/\\w/g, "#"); //[a-zA-Z0-9_] if(word.length > 4) { masked = masked.substring(0, word.length-4) + word.substring(word.length-4); } else { masked = word; } console.log(masked); // "###-###-###-5616"
以下是上一個示例中masked
更改的方式:
masked = "###-###-###-####"
masked = "###-###-###-5616"
沒有正則表達式示例
這是一個不使用正則表達式(屏蔽任何字符)的示例:
var word = "abc6364607935616", masked = word; // word & masked are the same if(word.length > 4) { masked = new Array(word.length - 4).join('#'); // create 4 less than word masked += word.substring(word.length - 4); // add on 4 last characters } console.log(masked); // "###########5616"
以下是上一個示例中masked
更改的方式:
masked = "abc6364607935616"
masked = "############"
masked = "############5616"
這是我得到的最短的。 您可以使用正則表達式模式( \\w(?=\\w{4})
)來屏蔽最后 4 個字母,如下所示:
let word = "4f563a46jy7u35616"; function mask() { if (word.length <= 4) { return word; } else { return word.replace(/\\w(?=\\w{4})/g, "#"); } } console.log(mask(word));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.