/// 排行榜昵称展示:邮箱形态则对 @ 前本地段脱敏。
public static class RankNicknameMask
{
///
/// 若为邮箱格式(单一 @ 且域名段含 .),保留 @ 前本地段除最后 3 个字符外的部分,最后 3 个字符固定显示为 ***;
/// 本地段长度 ≤3 时整段用等长 * 代替(如 abc@x.y → ***@x.y)。
/// 例:zhangsan@qq.com → zhang***@qq.com
///
public static string ForRankDisplay(string nickname)
{
if (string.IsNullOrEmpty(nickname)) return nickname;
int at = nickname.IndexOf('@');
if (at <= 0 || at != nickname.LastIndexOf('@') || at >= nickname.Length - 1)
return nickname;
string local = nickname.Substring(0, at);
string domain = nickname.Substring(at + 1);
if (local.Length == 0 || domain.Length == 0 || domain.IndexOf('.') < 0)
return nickname;
if (local.Length > 3)
{
string prefix = local.Substring(0, local.Length - 3);
return prefix + "***" + "@" + domain;
}
return new string('*', local.Length) + "@" + domain;
}
}