在javascript中屏蔽最后4位数字

时间:2014-12-18 11:11:52

标签: javascript jquery regex

这里我使用正则表达式模式来掩盖信用卡号码的最后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中可以吗?

JSFIDDLE

8 个答案:

答案 0 :(得分:31)

您可以使用:

str = str.replace(/\d(?=\d{4})/g, "*");

以超过4位的给定数量屏蔽除最后4位数之外的所有数字。

RegEx Demo

<强>解释

  • 此reges使用正向前瞻(?=\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方法:

检查jsFiddle demo

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;

Test example

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