ある種のマスクを持つカスタム ユーザー コントロールを WPF で開発したいと考えています。この機能は、多くのオンライン アプリケーションで提供されているものと非常によく似ています。この機能では、クレジット カード番号を入力すると、次回アカウントにサインインするたびに、カード番号の最後の数字 ( ** *4587 など) しか表示されませんが、この方法でデータを表示する 実際の値を変更せずに保持したいので、バインディング内で完全なデータにアクセスします。
質問する
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 桁を表示します。これは、元の番号の桁数に関係なく機能します。
さらに、マスク(または他のユーザーが提案した正規表現)が機能するかどうかはわかりません(よく理解していれば)最後の4桁を表示するのではなく、数字全体を置き換えるためです。
于 2012-10-15T19:49:55.787 に答える
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 に答える
1
Regex.Replaceを \d で使用して、数字を示すことができます
すなわち
var digits = new Regex(@"\d");
modifiedNumber = digits.Replace(originalNumber, "*");
または、最後のグループを除いて数字のセット全体を更新したい場合
@"\d{4}-"
于 2012-10-16T09:18:26.717 に答える