1

最後の 4 つの数字を除いて、アスタリスクでマスクされた銀行ルーティング/口座データを表示する必要があります。単体テストでこれを見つけるまでは、十分に単純に思えました。

string.Format("{0:****1234}",61101234)
「****1234」として正しく表示されます

しかし

string.Format("{0:****0052}",16000052)
誤って表示されます (ゼロのため??): "****1600005252""

C# で次を使用すると正しく動作しますが、中かっこなしで表示形式を設定すると、DevExpress が自動的に "{0: ... }" でラップするため、これを使用できません。

string.Format("****0052",16000052)

この形式を中括弧内で適切に機能させる方法を考えられる人はいますか (完全な 8 桁の数字が渡されます)。

更新: 上記の string.format は、私が解決しようとしている問題をテストする方法にすぎません。完成したコードではありません。ルーティング番号を正しくフォーマットするには、DevExpress に中括弧内の文字列フォーマットを渡す必要があります。

4

2 に答える 2

1

フォーマット文字列を作成しているコードが含まれていないのは残念です。フォーマット文字列がデータに依存しているように見えるのは非常に奇妙です。

私はこれをフォーマット文字列で行おうとはしません。代わりに、クレジットカード番号を「あいまいな」文字列形式に変換するメソッドを作成します。おそらくSubstring、文字列の連結を使用するだけです。例えば:

public static string ObscureFirstFourCharacters(string input)
{
    // TODO: Argument validation
    return "****" + input.Substring(4);
}

(クレジットカード番号のデータ型が明確ではありません。数値型であり、最初に文字列に変換する必要がある場合は、左に埋め込まれた固定サイズの文字列になるように注意する必要があります。ゼロ。)

于 2013-01-31T17:56:07.273 に答える
0

私はあなたがこのようなものを探していると思います:

string.Format("{0:****0000}", 16000052);

しかし、そのような * インラインでは見たことがありません。よく知らなければ、おそらくやったでしょう:

string.Format("{0}{1}", "****", str.Substring(str.Length-4, 4);

または、長さがわかっている場合は、フォーマット呼び出しをドロップすることさえあります。

これらのアプローチは一見の価値があります:文字列の最初の 12 文字の一部を *? でマスクします。

コメントでほのめかしているように、これも機能するはずです:

string.Format("{0:****####}", 16000052);

違いは、数字が存在しない場合は 0 を使用するとゼロが表示されますが、# は表示されません。あなたの状況では議論の余地があるはずです。

何らかの理由でリテラルのゼロを出力したい場合は、これを使用してください:

string.Format("{0:****\0\052}", 16000052);

ただし、これは入力に対して何もしていないことに注意してください。

于 2013-01-31T18:15:41.723 に答える