在JavaScript中屏蔽信用卡的最佳方法是什么?

时间:2015-06-28 06:22:20

标签: javascript node.js credit-card

在Node中,我需要在呈现视图层之前将信用卡转换成类似的信息:************1234

没有循环和丑陋是否有一个实用程序或一个班轮为此?信用卡可能会看到以下方式之一:

1234567898765432
1234-5678-9876-5432
1234 5678 9876 5432

5 个答案:

答案 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

演示:http://jsfiddle.net/7odv6kfk/

答案 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)

这适用于所有说不需要其他方法来掩盖信用卡的人。此解决方案将在卡号的最后4个字符后加上星号。

missing

jsfiddle example