I want to develop a custom user control in WPF which has some sort of mask. this functionality is very like the one provided in many online applications where u enter your credit card number and next time whenever u sign in to your account u see only last for digits of the card number (something like ***4587) but while I display data in this way I want to keep real value unchanged so inside binding I will access full data.
问问题
1049 次
3 回答
2
你可以尝试这样的事情:
string originalNumber = textBoxOriginalNumber.Text;
int numberOfDigits = textBoxOriginalNumber.Text.Length;
string hidden = new String('*', numberOfDigits-4);
textBoxModifiedNumber.Text = hidden + originalNumber.Remove(0, numberOfDigits-4);
这不是一个优雅的解决方案,但如果其他人为您提供更好的解决方案,它将帮助您。基本上,它采用原始信用卡号,计算它有多少位数,删除“n-4”的第一个数字,然后显示*符号“n-4”次加上最后四个数字。无论原始号码有多少位数,这都会起作用。
此外,我不确定掩码(或下面其他用户建议的正则表达式)是否会起作用,因为(如果我理解得很好)它将替换整个数字,而不是显示最后 4 位数字。
于 2012-10-15T19:49:55.787 回答
1
您可以使用Regex.Replace和 \d 来表示一个数字
IE
var digits = new Regex(@"\d");
modifiedNumber = digits.Replace(originalNumber, "*");
或者,如果您想更新除最后一组之外的整组数字
@"\d{4}-"
于 2012-10-16T09:18:26.717 回答
1
好的,这是我解决该问题的方法。在使用卡号之后,我也想使用 ID 和 SN 号,所以我所做的只是编写了一个小方法,它接受字符串并在这里返回掩码值,以防有人需要这个功能。
public static string GetMaskedNumber(string unsecuredNumber, char maskChar)
{
return unsecuredNumber.Substring(unsecuredNumber.Length - 4)
.PadLeft(unsecuredNumber.Length - 6, ' ')
.PadLeft(unsecuredNumber.Length, maskChar);
}
于 2012-10-16T14:40:01.850 回答