我必须用'*'替换信用卡的第一个(n-4)个数字。 我正在使用以下三行代码。
var cardnumber = '1A2C3GF4DS84Ff';
last4digits = cardNumber.substring(cardNumber.length-4);
prevdigits = cardNumber.substring(0, cardNumber.length-4).replace(/[0-9]/g,'*');
$cache.cardNumber.val( prevdigits + last4digits);
只是想知道我可以使用正则表达式在一行代码中完成。
答案 0 :(得分:3)
使用前瞻确保数字后面至少有四个剩余字符。换句话说,最后四个字符中的数字将不匹配:
var regexp = /\d(?=....)/g;
> cardnumber.match(regexp)
< ["1", "2", "3", "4"]
替换为星号:
> cardnumber.replace(regexp, '*')
< "*A*C*GF*DS84Ff"
有关预测的信息是here。
答案 1 :(得分:1)
从here我得到了这段代码。
var text = '1ab2cb3cd4ab5cb6cd7';
var matches = text.match(/(\d)/g);
for (i=0; i<matches.length; i++) {
alert(matches[i]);
}
实际上,他们也希望提取数字。我不需要改变正则表达式。
您可以通过以下方式将循环限制为:
for (i=0; i<matches.length && i < 5; i++){
答案 2 :(得分:0)
只需使用(\d)
,然后以编程方式进行检查。
答案 3 :(得分:0)
var y= x.replace(/\D/g, '').substring(0, 5);
答案 4 :(得分:0)
.replace()
函数可以使用函数作为替换函数,并且将为每个匹配调用它。它可以保留一个计数器并根据计数器返回不同的东西。
var str = '1A2C3GF4DS84Ff';
var digits = 0;
var newstr = str.replace(/\d/g, function(match) {
if (digits++ < 4) {
return '*';
} else {
return match;
}
});
document.write(newstr);
答案 5 :(得分:0)
看起来跟随一个人完成了你需要的工作:
var text= '1A2B3C4D5E6F',
n = 5;
text = text.replace(/\d/g, function ($1){
return n-- ?'*' : $1
});