在Node中,我需要在呈现视图层之前将信用卡转换成类似的信息:************1234
。
没有循环和丑陋是否有一个实用程序或一个班轮为此?信用卡可能会看到以下方式之一:
1234567898765432
1234-5678-9876-5432
1234 5678 9876 5432
答案 0 :(得分:6)
这是Ramda和一些RegEx:
的一种方式var ensureOnlyNumbers = R.replace(/[^0-9]+/g, '');
var maskAllButLastFour = R.replace(/[0-9](?=([0-9]{4}))/g, '*');
var hashedCardNumber = R.compose(maskAllButLastFour, ensureOnlyNumbers);
hashedCardNumber('1234567898765432'); // ************5432
答案 1 :(得分:2)
不需要正则表达式:
var cc='1234-5678-9012-3456';
var masked = '************'+cc.substr(-4); // ************3456
如果最后四位数字是连续的,则适用于任何格式。
答案 2 :(得分:0)
此处使用正则表达式使用正则表达式的简单JavaScript
var cardNumbers = [
"1234567898765432",
"1234-5678-9876-5432",
"1234 5678 9876 5432"
];
console.log(cardNumbers.map(maskCardNumber));
//> ["************5432", "************5432", "************5432"]
function maskCardNumber(cardNumber) {
return cardNumber.replace(/^[\d-\s]+(?=\d{4})/, "************");
};

与AllienWebguy的实施不同:
replace()
调用"1B2C3D4E5F6G7H89876-5432"
或"1234+5678+9876=54-32"
无法使用)答案 3 :(得分:0)
删除非数字,生成该长度的星号字符串 - 4,追加最后4位:
var masked = Array(cc.replace(/[^\d]/g, "").length - 3).join("*") + cc.substr(cc.length - 4);
或者在面具中包含空格/连字符:
var masked = Array(cc.length - 3).join("*") + cc.substr(cc.length - 4);
答案 4 :(得分:0)