Маскировка имени на основе длины в C# - PullRequest
0 голосов
/ 11 марта 2020

Как мне сделать маскировку в имени, отчестве и фамилии? Сделайте маскировку на основе количества букв в каждом слове в названии. При условии:

  • Если есть 3-4 букв, то последние две буквы будут замаскированы.
  • Если есть больше , чем 4 букв буквы первые 2 и буквы последние 1 не должны маскироваться.

Примеры:

  1. "Jo Dyne Roger" --> "Jo Dy** Ro**r"
  2. "Samantha Summer" --> "Sa*****a Su***r"

В javascript Я использую этот код:

var name ="Jo Dyne Roger";
var regex1 =/\b(\w{1,2})(\w{2,}?)(\w?)\b/g;
var regex2 =/\b(\w{3})(\w+)(\w)\b/g;

console.log(name.replace(
    regex1,
    (_, first, middle, last) => `${first}${'*'.repeat(middle.length)}${last}`).replace(
    regex2,
    (_, first, middle, last) => `${first}${'*'.repeat(middle.length)}${last}`));

Я не понимаю, как реализовать то же самое в C#

1 Ответ

1 голос
/ 11 марта 2020

Давайте реализуем шаг за шагом, начиная с маскировки одного имени:

, если есть 3-4 буквы, то последние две буквы будут замаскированы. Если есть еще 4 буквы, первые 2 буквы и последняя 1 буква не будут маскироваться

private static string MyMask(string value) {
  if (string.IsNullOrEmpty(value) || value.Length < 3)
    return value;
  else if (value.Length <= 4)
    return value.Substring(0, 2) + 
           new string('*', value.Length - 2);
  else
    return value.Substring(0, 2) + 
           new string('*', value.Length - 3) + 
           value.Substring(value.Length - 1);
}

Имея маску, мы можем написать простое регулярное выражение: все, что мы хотим, это Replace слов с 3 буквами или более в соответствующие MyMask

 string source = "Jo Dyne Roger";

 string result = Regex.Replace(source, @"\b\w{3,}\b", match => MyMask(match.Value));

Демо:

  string[] tests = new string[] {
    "Jo Dyne Roger",
    "Samantha Summer",
  };

  string report = string.Join(Environment.NewLine, tests
    .Select(test => $"{test} --> {Regex.Replace(test, @"\b\w{3,}\b", match => MyMask(match.Value))}")
  );

  Console.Write(report);

Результат:

Jo Dyne Roger --> Jo Dy** Ro**r
Samantha Summer --> Sa*****a Su***r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...