/** * Umlaut-Transliteration für AD-kompatible Namen (E-Mails, sAMAccountName, UPN). * * Wandelt deutsche Sonderzeichen in ASCII-Äquivalente um: * ä→ae, ö→oe, ü→ue, ß→ss (und Großvarianten) * * WICHTIG: Reihenfolge — Großbuchstaben-Varianten VOR toLowerCase() behandeln, * damit "Schröder" → "Schroeder" (nicht "schroder") und "Straße" → "Strasse". */ function transliterateUmlauts(str) { if (typeof str !== 'string') return ''; return str .replace(/ä/g, 'ae').replace(/ö/g, 'oe').replace(/ü/g, 'ue') .replace(/Ä/g, 'Ae').replace(/Ö/g, 'Oe').replace(/Ü/g, 'Ue') .replace(/ß/g, 'ss'); } /** * Normalisiert einen Namen für den lokalen Teil einer E-Mail-Adresse: * Umlaute → ASCII, Kleinbuchstaben, Leerzeichen → Punkte, nur a-z0-9. erlaubt. * Beispiel: "Jürgen Schröder" → "juergen.schroeder" */ function toEmailLocalPart(str) { if (typeof str !== 'string') return ''; return transliterateUmlauts(str) .toLowerCase() .replace(/\s+/g, '.') .replace(/[^a-z0-9.]/g, ''); } /** * Normalisiert einen Namen für sAMAccountName/UPN (Punkt-Format): * wie toEmailLocalPart, aber ohne Punkt-Entfernung (Punkte sind erlaubt). */ function toAdAccountName(str) { return toEmailLocalPart(str); } /** * Normalisiert einen Namen für das Pre-Windows-2000-Format (Nachname+Initial): * Umlaute → ASCII, nur a-zA-Z0-9 erlaubt, Groß-/Kleinschreibung bleibt erhalten. * Beispiel: "Schröder" + "J" → "SchroederJ" */ function toSamAccountName(str) { if (typeof str !== 'string') return ''; return transliterateUmlauts(str).replace(/[^a-zA-Z0-9]/g, ''); } module.exports = { transliterateUmlauts, toEmailLocalPart, toAdAccountName, toSamAccountName };