54 lines
2.0 KiB
JavaScript
54 lines
2.0 KiB
JavaScript
/**
|
|
* 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"
|
|
*
|
|
* RFC 5321-konform: Kein führender/abschließender Punkt, keine Doppelpunkte
|
|
* (".."), kein leerer Local-Part (gibt '' zurück — Aufrufer muss Fallback haben).
|
|
*/
|
|
function toEmailLocalPart(str) {
|
|
if (typeof str !== 'string') return '';
|
|
return transliterateUmlauts(str)
|
|
.toLowerCase()
|
|
.replace(/\s+/g, '.')
|
|
.replace(/[^a-z0-9.]/g, '')
|
|
.replace(/\.{2,}/g, '.') // ".." → "." (durch aufeinanderfolgende Trenner)
|
|
.replace(/^\.+|\.+$/g, ''); // führende/abschließende Punkte entfernen (RFC 5321)
|
|
}
|
|
|
|
/**
|
|
* 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 }; |