0

私は文字列値の大規模なリストを調べ、クレジットカードの兆候を取り除くという任務を負っています。したがって、文字列内で一致するものが見つかった場合(n =数値):

nnnn nnnn nnnn nnnn (4 x 4 numerical)
nnnnnnnnnnnnnnnn (16 numerical)
nnnn-nnnn-nnnn-nnnn (Hyphened)
nnnn nnnnnn nnnn (American express?)
nnnnnnnnnnnnnn (AX, no spaces)
nnnn-nnnnnn-nnnn (AX, Hyphened)

文字列のその部分を次のように置き換える必要があります[CARD NUMBER REMOVED]

それで、

"Client called and gave credit card details as 1234123412341234, exp 1201, and will be booked next week"

次のようになります:

"Client called and gave credit card details as `[CARD NUMBER REMOVED]`, exp 1201, and will be booked next week"

私は正規表現がこれを見つけるだろうと思っていますが、私は正規表現の経験がなく、多くのパターンがあります。そして、どうすればその部分を置き換えることができますか?

各文字を繰り返してルールチェックを行うものを書くこともできますが、それはハッキーのようです。

何か案は?

私はこれを試しています:

    const string pattern = @"^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$";
    const string replacement = "[CARD DETAILS REMOVED]";
    var rgx = new Regex(pattern);
    string cleansedText = rgx.Replace(UncleansedText, replacement);
    return cleansedText;

しかし、これには一致するものが見つからないようです。

"1234610008918730 ^^9-11^^コード064^"

4

3 に答える 3

3

これは同様の質問ですが、選択された回答はありません。ただし、上位投票者は、次の正規表現を使用したWebサイトを提案しました。

\b(?:\d[ -]*?){13,16}\b
于 2012-11-12T02:53:04.963 に答える
0
myString = Regex.Replace(myString, 
    @"(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})", 
    "`[CARD NUMBER REMOVED]`");

ここから取得したクレジットカードの正規表現。

于 2012-11-12T02:47:04.173 に答える
0

これはやっかいなことなので、準備をしてください!

Regex regexObj = new Regex(@"(?:(?<visa>4[ -.,/\\]*(?:\d[ -.,/\\]*){11}(?:(?:\d[ -.,/\\]*){3})?\d)|(?<mastercard>5[ -.,/\\]*[1-5](?:[ -.,/\\]*[0-9]){14})|(?<discover>6[ -.,/\\]*(?:0[ -.,/\\]*1[ -.,/\\]*1|5[ -.,/\\]*\d[ -.,/\\]*\d)(?:[ -.,/\\]*[0-9]){12})|(?<amex>3[ -.,/\\]*[47](?:[ -.,/\\]*[0-9]){13})|(?<diners>3[ -.,/\\]*(?:0[ -.,/\\]*[0-5]|[68][ -.,/\\]*[0-9])(?:[ -.,/\\]*[0-9]){11}) |(?<jcb>(?:2[ -.,/\\]*1[ -.,/\\]*3[ -.,/\\]*1|1[ -.,/\\]*8[ -.,/\\]*0[ -.,/\\]*0|3[ -.,/\\]*5(?:[ -.,/\\]*[0-9]){3})(?:[ -.,/\\]*[0-9]){11}))");
resultString = regexObj.Replace(subjectString, "[CARD DETAILS REMOVED]");

これは、RegexBuddyライブラリからわずかに変更されています。追加したのは、スペース、ダッシュ、ピリオド、コンマ、スラッシュ、バックスラッシュを任意の組み合わせとグループ化スタイルで使用して数値を区切る機能でした。

注:これは、上記の例と一致します。

また、同じ桁数であるが有効なクレジットカード番号ではないように見える番号とは一致しません。

例:「55554141、5555 3214でクライアントに電話するか、ourclient@example.comにメールしてください。」

于 2012-11-12T03:06:07.487 に答える