/// 排行榜昵称展示:邮箱形态则对 @ 前本地段脱敏。 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; } }