2

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.

4

3 回答 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 回答