C # RegEx. Заменить кредитную карту в тексте - PullRequest
1 голос
/ 14 марта 2012

У меня есть текст с номером кредитной карты, например: «Номер вашей кредитной карты 4321432143219999, это действительно ваша кредитная карта!»

Мне нужно найти в RegEx это число и заменить его на ************9999, поэтому текст результата должен быть: «Номер вашей кредитной карты ************9999, это действительно ваша кредитная карта!»

Как мне это сделать в C #?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 14 марта 2012
var str = "Your credit card number is 4321432143219999, this is really your credit card!";
var res = Regex.Replace(str, "[0-9](?=[0-9]{4})", "*");

При этом будут искать цифры, за которыми следуют как минимум 4 цифры, и заменять их на * (так что это будет одурачено 123456 и изменит его на **3456)

Если номера вашей кредитной карты имеют длину 16 цифр:

var res2 = Regex.Replace(str, @"\b[0-9]{12}(?=[0-9]{4}\b)", new string('*', 12));

Это заменит блок из 12 цифр, за которым следуют 4 цифры (всего 16 цифр), на 12x *.Цифры должны быть отделены от другого текста пробелом или другими несловесными символами.Так что A1234567890123456 не хорошо, как не 1234567890123456A.1234567890123456, в порядке, потому что , не является символом слова.

3 голосов
/ 18 июня 2014

Лучше по возможности избегать регулярных выражений, потому что их медленнее и сложнее устранять, чем обычные операции с подстрокой.

    public static string HideNumber(string number)
    {
        string hiddenString = number.Substring(number.Length - 4).PadLeft(number.Length, '*');
        return hiddenString;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...