redactEmail method
Redacts an email-like string to something like j***@example.com.
If this string contains exactly one @, shows the first character of the local part,
then maskChar repeated localPartVisible times (default 3), then @ and the domain unchanged.
Otherwise returns maskChar repeated by length (no structure assumed).
Throws ArgumentError if maskChar is empty or localPartVisible is negative.
Example:
'user@example.com'.redactEmail(); // 'u***@example.com'
'a@b.co'.redactEmail(maskChar: 'x'); // 'axxx@b.co'
Implementation
@useResult
String redactEmail({
int localPartVisible = 3,
String maskChar = '*',
}) {
if (maskChar.isEmpty) {
throw ArgumentError(_kErrMaskCharNonEmpty, _kParamMaskChar);
}
if (localPartVisible < 0) {
throw ArgumentError(_kErrLocalPartVisibleNonNegative, _kParamLocalPartVisible);
}
if (isEmpty) return this;
final int at = indexOf('@');
if (at <= 0 || at != lastIndexOf('@')) {
return maskChar * length;
}
final String local = substring(0, at);
final String domain = substring(at);
final String first = local.isEmpty ? '' : local[0];
final String rest = maskChar * (localPartVisible > 0 ? localPartVisible : 0);
return first + rest + domain;
}