这里我使用正则表达式模式来掩盖信用卡号码的最后4位数字
$('#ccnumber').html(ccnbr); //ccnumber refers to div ID
$('#ccnumber').text(function(_,val) {
return val.replace(/\d{12}(\d{4})/, "************$1");
});
仅适用于16位数的信用卡号码。但是,我需要通过*
屏蔽传入的数字(可能是10或11)并显示最后4位数字。在javascript / Jquery中可以吗?
答案 0 :(得分:31)
您可以使用:
str = str.replace(/\d(?=\d{4})/g, "*");
以超过4位的给定数量屏蔽除最后4位数之外的所有数字。
<强>解释强>
(?=\d{4})
,表示匹配后应跟4位数字。\d
匹配具有以上前瞻条件的单个数字,并将其替换为*
答案 1 :(得分:6)
该功能将屏蔽卡号的前12位数字,如下所示:-
输入:4444444444444444
输出:**** **** **** 4444
function formatCardNumber(event, element) {
if (isNaN(event.key) && !isAllowedKey(event)) {
event.preventDefault();
} else {
if (event.keyCode != 8) {
if(element.value.length > 14) {
var position = element.selectionStart;
element.value = element.value.replace(/\W/gi, '').replace(/^(.{4})(.{4})(.{4})(.*)$/, "$1 $2 $3 $4");
if(element.value.length != 19) {
element.setSelectionRange(position, position);
}
}
else {
element.value = element.value.replace(/\W/gi, '').replace(/(.{4})/g, '$1 ');
}
}
}
}
function isAllowedKey(event) {
var allowed = false;
if (event.keyCode === 8 || event.keyCode === 9 || event.keyCode === 37 || event.keyCode === 39) {
allowed = true;
}
return allowed;
}
function limit(event, element, max_chars) {
if(isTextSelected(element)){ //
max_chars += 1;
}
if (element.value.length >= max_chars && !isAllowedKey(event)) {
event.preventDefault();
}
}
function showCardValue() {
document.getElementById("cardNo").value = document.getElementById("cardNoSafe").value;
}
function isTextSelected(input) {
var startPosition = input.selectionStart;
var endPosition = input.selectionEnd;
var selObj = document.getSelection();
var selectedText = selObj.toString();
if (selectedText.length != 0) {
input.focus();
input.setSelectionRange(startPosition, endPosition);
return true;
} else if (input.value.substring(startPosition, endPosition).length != 0) {
input.focus();
input.setSelectionRange(startPosition, endPosition);
return true;
}
return false;
}
function hideCardValue(val) {
document.getElementById("cardNoSafe").value = val;
var len = val.length;
if (len >= 14) {
const regex = /\d{4}(?= \d{1})/g;
const substr = "****";
document.getElementById("cardNo").value = val.replace(regex, substr);
}
}
<div class="form-group">
<input name="AccountNo" id="cardNo" placeholder="Card Number" title="Card Number" class="form-control" onfocus="showCardValue()" onblur="hideCardValue(this.value)" onkeypress="formatCardNumber(event, this); limit(event, this, 19) " onpaste="return false" oncut="return false" tabindex="2" autocomplete="nope" type="text">
<span class="placeholder-text" style="display: none;">Please enter Card Number</span>
<input name="cardNoSafe" id="cardNoSafe" value="" style="display:none;">
</div>
答案 2 :(得分:2)
这是一种不使用RegEx的Javascript方法:
var mainStr = '1234567891234567',
vis = mainStr.slice(-4),
countNum = '';
for(var i = (mainStr.length)-4; i>0; i--){
countNum += '*';
}
alert(countNum+vis);
答案 3 :(得分:0)
你在这里。但请记住,这是非常非常糟糕的做法。
$('#ccnumber').text(function(_,val) {
return val.replace(/(\d*?)(\d{4})/, "************$1");
});
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
答案 4 :(得分:0)
如果某人在太空中有卡片占位符,例如&#34; 4242 4242 4242 4242&#34;,则必须使用其他正则表达式:\ d {4}(?= \ d {4})并替换在&#34; ****&#34;:
完整示例:
str = str.replace(/\d{4}(?= \d{4})/g, "****");
它将取代卡&#34; 4242 4242 4242 4242&#34; as&#34; **** **** **** 4242&#34;
答案 5 :(得分:0)
可接受的答案仅适用于数字,但是我遇到了一种情况,其中输入可以是任何字符串(信用卡号,电话号码,机密问题等),并且如果我们想在此字符串上实现相同(即屏蔽所有字符)最后4个字符除外),则可以使用以下代码:
str.replace(/.(?=\d{4})/g, "#")
我的要求是将其替换为#号。关键是要使用.
,它适用于任何单字符检查。接受答案的解释仍然成立,这仅适用于任何字符,而不仅限于数字。希望能对某人有所帮助
答案 6 :(得分:0)
这是一个纯JavaScript答案。
function cardHide(input) {
//use slice to remove first 12 elements
let first12 = input.slice(0, 12);
//define what char to use to replace numbers
let char = '*'
let repeatedChar = char.repeat(input.length -4);
// replace numbers with repeated char
first12 = first12.replace(first12, repeatedChar);
//concat hidden char with last 4 digits of input
let hiddenNumbers = first12 + input.slice(input.length-4);
//return
return hiddenNumbers;
}
答案 7 :(得分:0)
var input = "1234567890";
input = input.replace(/^(\d{0,4})(\d{0,3})/, '$1 $2')
var prefix = input.substr(0, input.length - 4);
var suffix = input.substr(-4);
var masked = prefix.replace(/\d/g, '*');
var a = masked + suffix;
console.log(a)
Console Output:
**** **7890