sanitizeFilename function

String sanitizeFilename(
  1. String input, [
  2. String replacement = '_'
])

Sanitize-filename removes the following: Control characters (0x00–0x1f and 0x80–0x9f) Reserved characters (/, ?, <, >, , :, *, |, and ") Unix reserved filenames (. and ..) Trailing periods and spaces (for Windows) Windows reserved filenames (CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9)

Implementation

String sanitizeFilename(String input, [String replacement = '_']) {
  final illegalRe = RegExp(r'[\/\?<>\\:\*\|"]', multiLine: true);
  final controlRe = RegExp(r'[\x00-\x1f\x80-\x9f]', multiLine: true);
  final reservedRe = RegExp(r'^\.+$');
  final windowsReservedRe = RegExp(
    r'^(con|prn|aux|nul|com[1-9]|lpt[1-9])(\..*)?$',
    caseSensitive: false,
  );
  // var windowsTrailingRe = RegExp(r'[\. ]+$');

  var sanitized = input
      .replaceAll('�', replacement)
      .replaceAll('А╟', replacement)
      .replaceAll('╟', replacement)
      .replaceAll(illegalRe, replacement)
      .replaceAll(controlRe, replacement)
      .replaceAll(reservedRe, replacement);
  //  .replaceAll(windowsReservedRe, replacement)
  // .replaceAll(windowsTrailingRe, replacement);

  if (windowsReservedRe.hasMatch(input)) {
    if (!input.contains('.')) {
      sanitized = replacement + sanitized;
    }
  }

  return sanitized;
  //return truncate(sanitized, 255);
}