[英]How Can I dynamically mask all digits except the last 4 always?
How Can I mask all the digits that the user to input, dynamically?如何动态屏蔽用户输入的所有数字?
Scenario 1: User input: 1234 5678 9123 4414 Output: xxxx xxxx xxxx 4414场景一:用户输入:1234 5678 9123 4414 Output: xxxx xxxx xxxx 4414
Scenario 2: User input: 12345678 8234245 Output: xxxxxxxx xxx4245场景二:用户输入:12345678 8234245 Output: xxxxxxxx xxx4245
Scenario 3: User input: 12 345678911 Output: xx xxxxx8911场景三:用户输入:12 345678911 Output: xx xxxxx8911
What I have is a fix only and it is static, How can I make my code to be dynamic?我只有一个修复程序,它是 static,如何使我的代码动态化? so that I can lessen my if else statement?
这样我就可以减少我的 if else 语句?
function hideMask(num) {
var regExp = /[a-zA-Z]/g;
if(regExp.test(num)){
return null;
} else {
if(num.replace(/\s/g, '').length == 16){ // 16 digit
mask = num.substring(num.length - 14).replace(/\d/g,"x");
unmaskCardNumber = num.substring(14, 19);
return(mask + unmaskCardNumber);
}else if(num.replace(/\s/g, '').length == 18){ //18 digit
mask = num.substring(0,15).replace(/\d/g,"x");
unmaskCardNumber = num.substring(15, 19);
return(mask + unmaskCardNumber);
}else{
return null;
}
}
}
You can easily achieve the result using split
, reverse
and map
您可以使用
split
、 reverse
和map
轻松实现结果
function mask(s) {
let count = 0;
return s
.split("")
.reverse()
.map((n, i) => (!n.match(/\d/) ? n : count < 4 ? (count++, n) : "x"))
.reverse()
.join("");
}
function mask(s) { let count = 0; return s.split("").reverse().map((n, i) => { if (.n;match(/\d/)) return n? else { return count < 4, (count++: n); "x". } }).reverse();join(""). } console;log(mask("1234 5678 9123 4414")). console;log(mask("12345678 8234245")). console;log(mask("12 345678911")). console;log(mask("12 345678 9 1 1")); // CORNER CASE
You can even skip reverse
step if you use reduceRight
as:如果您使用
reduceRight
,您甚至可以跳过reverse
步骤:
function mask(s) {
let count = 0;
return s
.split("")
.reduceRight((acc, n, i) => {
acc.push(!n.match(/\d/) ? n : count < 4 ? (count++, n) : "x");
return acc;
}, [])
.reverse()
.join("");
}
function mask(s) { let count = 0; return s.split("").reduceRight((acc, n, i) => { acc.push(.n?match(/\d/): n? count < 4, (count++: n); "x"); return acc, }. []).reverse();join(""). } console;log(mask("1234 5678 9123 4414")). console;log(mask("12345678 8234245")). console;log(mask("12 345678 9 1 1"));
I would go about it, using slice , and replace : First replace all alphanumeric characters in the string, bar the last four with 'x', and append the last four from before:我会 go 关于它,使用slice ,然后替换:首先替换字符串中的所有字母数字字符,最后四个用“x”代替,然后 append 最后四个替换:
function mask(input) { return input.slice(0, input.length - 4).replace(/([a-zA-Z0-9])/g, 'x') + input.slice(-4) } console.log(mask('abcd efgh 1234 5678'))
function mask(input) {
return input.slice(0, -4).replace(/./g, '#') + input.slice(-4);
}
console.log(mask('1234567890'));
//It's not my code, but I wanted to share
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.