// Wie aus einer Eingabe Suchmuster werden. // // Getrennt von der Seite, weil hier die Entscheidungen stecken, die man // prüfen können muss: was als Wort zählt, was am Wortanfang treffen muss und // was von LIKE als Text und nicht als Platzhalter gelesen wird. // // Die Bedeutung selbst — „trifft am Wortanfang" — liegt im SQL der Seite: // verglichen wird gegen Vorname, Nachname und Position zusammengesetzt, mit // Trennzeichen als Wortgrenze. /** Nur Ziffern? Dann ist es eine Personalnummer und kein Name. */ export function istPersonalnummer(term: string): boolean { return /^\d+$/.test(term.trim()); } /** * Je Suchwort zwei LIKE-Muster: „am Anfang" und „nach einem Leerzeichen". * Zusammen ergeben sie „am Anfang eines Wortes". * * Ein Wort als Teilzeichenkette zu suchen wäre einfacher und war die erste * Fassung — bei „Winkler H" traf das „H" dann auf Thomas, Katharina und * CNC-Dreher:in, also auf alle. Je kürzer die Eingabe, desto unbrauchbarer * das Ergebnis, und ein Anfangsbuchstabe ist die kürzeste sinnvolle Eingabe. */ export function suchMuster(term: string): string[][] { return term .trim() .split(/\s+/) .filter(Boolean) .map((wort) => { // Die Platzhalter von LIKE entschärfen: wer „50 %" tippt, sucht Text. const klein = wort.toLowerCase().replace(/[\\%_]/g, (z) => `\\${z}`); return [`${klein}%`, `% ${klein}%`]; }); }