Я создаю функцию для маскировки адреса электронной почты (кроме первых 2 букв и последних 2 букв перед знаком @
), но первые 2 буквы все еще маскируются.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Rextester
{
public class Program
{
public static void Main(string[] args)
{
string email = "[email protected]";
string Email = maskEmail(email);
Console.WriteLine("Email :"+Email);
}
public static string maskEmail(string email)
{
string pattern = @"[\w-\._\+%a]*(?=[\w]{2}@)";
string maskedEmail = System.Text.RegularExpressions.Regex.Replace(email, pattern, m => new string('*', m.Length));
return (string.IsNullOrEmpty(maskedEmail) ? email : maskedEmail);
}
}
}
Есть ли решение этой проблемы?
Здесь вы также можете использовать подход без регулярных выражений:
public static string maskEmailNoregex(string email)
{
if (string.IsNullOrEmpty(email)) return email; // Return email back as it is null or empty
var split = email.Split('@'); // Split with @ char
if (split.GetLength(0) != 2 || split[0].Length < 5) return email; // There is nothing to modify, return email
return split[0].Substring(0, 2) + new string('*', split[0].Length-4) + split[0].Substring(split[0].Length - 2) + "@" + split[1];
}
Если вы предпочитаете использовать регулярное выражение, см.
public static string maskEmail(string email)
{
if (string.IsNullOrEmpty(email)) return email;
return Regex.Replace(email, @"(?<=^[^@]{2,})[^@](?=[^@]{2,}@)", "*");
}
Смотрите демоверсию C# . Также см. демонстрацию регулярного выражения. Подробности:
(?<=^[^@]{2,})
- место в строке, которому непосредственно предшествуют два или более символов, отличных от @
с начала строки[^@]
- любой символ, кроме @
(?=[^@]{2,}@)
— место в строке, за которым сразу следуют любые два или более символов, кроме @
, до символа @
.