ebody: Namen Validierung mit Regex - Buchstaben, diakritische Zeichen, Bindestrich, 1 Leerzeichen erlauben

Hallo,

wenn man einen Namen in ein Textfeld eingibt, soll dieser nach der Eingabe überprüft werden. Buchstaben, diakritische Zeichen (z.B. é, Ã) , Bindestrich, 1 Leerzeichen sollen erlaubt sein.

Als Test String verwende ich:

rweéw~ed^d_-eÃã â âäöüdfggdg dfgdg%$4324üf

Dieser soll auf unerlaubte Zeichen durchsucht werden.

Ich nutze für das Testen von Regex u.a. The Regex Coach. Mit diesem Suchmuster wurden alle nicht erlaubten Zeichen gefunden, nur Leerzeichen müssten noch rausgenommen werden:

[\W\d]

Wenn ich das Suchmuster aber in Javascript verwende, funktioniert es nicht. text.search(/[\W\d]/ig);

Weiß jemand warum es in dem Tool funktioniert (was bisher immer sehr zuverlässig war) und in JS nicht?

Dann habe ich es hier probiert und bin bisher bei dem Suchmuster: [^a-zA-Zäöü\s-]

Aber Buchstaben mit Sonderzeichen wie é, Ã etc. werden mit diesem Suchmuster gefunden, welche aber erlaubt sein sollen.

Hat jemand einen Tipp, wie ich das Suchmuster erweitern kann, so dass auch Buchstaben mit Sonderzeichen nicht gefunden werden?

Gruß ebody

  1. @@ebody

    wenn man einen Namen in ein Textfeld eingibt, soll dieser nach der Eingabe überprüft werden. Buchstaben, diakritische Zeichen (z.B. é, Ã) , Bindestrich, 1 Leerzeichen sollen erlaubt sein.

    Ludwig van Beethoven darf man also nicht heißen?

    Was genau willst du da validieren?

    Der reguläre Ausdruck zur Validierung von Namen ist: .+.

    LLAP 🖖

    --
    „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
    „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

    —Marc-Uwe Kling
    1. Hallo Gunnar,

      „Ludwig XIV. von Frankreich“ wäre auch interessant.

      Ob es Eltern gibt, die ihr Kind Wolke7 nennen? Wolke ohne Ziffer gibt's ja schon.

      Rolf

      --
      sumpsi - posui - clusi
    2. Ludwig van Beethoven darf man also nicht heißen?

      Wenn "Ludwig van Beethoven" darauf geprüft wird, ob darin andere Zeichen als Buchstaben, diakritische Zeichen (z.B. é, Ã) , Bindestrich, 1 Leerzeichen vorkommen, wäre das Ergebnis, das "Ludwig van Beethoven" keine dieser anderen Zeichen enthält und damit ok ist. Das alle Zeichen die im Namen vorkommen erlaubt sind.

      Gruß ebody

      1. Hallo ebody,

        der olle Louie hat aber 2 Leerzeichen im Namen. Oder willst Du zwei aufeinanderfolgende Leerzeichen ausschließen?

        Rolf

        --
        sumpsi - posui - clusi
        1. Hallo ebody,

          der olle Louie hat aber 2 Leerzeichen im Namen. Oder willst Du zwei aufeinanderfolgende Leerzeichen ausschließen?

          Rolf

          Die beiden Leerzeichen spielen keine Rolle, weil ich den Namen nur auf nicht erlaubte Zeichen wie Sonderzeichen und Zahlen prüfe. Wird nur eins dieser nicht erlaubten Zeichen gefunden, kann ich einen Hinweis einblenden.

          2 oder mehr direkt aufeinander folgende Leerzeichen würde ich aber ebenfalls mit dem Suchmuster finden wollen. Weil sie zu den nicht erlaubten Zeichen(ketten) gehören.

          Gruß ebody

  2. Hallo ebody,

    das Problem ist, dass der Begriff "Word Characters" ggf. locale-abhängig sein kann. Wortzeichen in en-US und in de-DE könnten verschieden sein.

    Sicherer bist Du mit der Unicode-Kategorie \pL, das wären alle Buchstaben - aber das wird von JS nicht unterstützt (sagt regex101).

    .+ ist für Namen sicherlich das sinnvollste. Die Welt ist groß und wird immer verrückter.

    Rolf

    --
    sumpsi - posui - clusi
    1. .+ ist für Namen sicherlich das sinnvollste. Die Welt ist groß und wird immer verrückter.

      Aber .+ würde ja jedes Zeichen finden. Ich möchte den Namen auf nicht erlaubte Zeichen prüfen. Auch wenn es super hippe Eltern gibt, die ihr Kind Brooklyn3000*** nennen, werde ich diese ausschließen ;-) Zahlen und Sonderzeichen sollen nicht erlaubt sein.

      Gruß ebody

      1. @@ebody

        Zahlen und Sonderzeichen sollen nicht erlaubt sein.

        Definiere „Zahlen“! „Friedrich 2.“ ist nicht erlaubt, „Friedrich II.“ aber doch?

        Definiere „Sonderzeichen“! Seulgi Park[1] soll ihren Namen nicht als „Seulgi Park (박슬기)“ oder „박슬기 (Seulgi Park)“ angeben dürfen?

        LLAP 🖖

        --
        „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
        „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

        —Marc-Uwe Kling

        1. umgedrehte Reihenfolge Vorname Familienname; eigentlich andersrum, Familienname zuerst: Park Seulgi, wie es auch in Hangeul notiert ist ↩︎

        1. @@Gunnar Bittersmann

          Screenshot

          Der Zeilenumbruch zwischen „ und 박 ist aber auch suboptimal.

          LLAP 🖖

          --
          „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
          „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

          —Marc-Uwe Kling
    2. @@Rolf B

      .+ ist für Namen sicherlich das sinnvollste.

      Noch sinnvoller als das Sinnvollste ist, gar keinen regulären Ausdruck zu verwenden. 😜

      LLAP 🖖

      --
      „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
      „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

      —Marc-Uwe Kling
  3. Ich habe jetzt dieses Suchmuster verwendet, um den String auf nicht erlaubte Zeichen zu prüfen: [0-9!"§$%&\/()=?`´*+~'#_:,.;|<>@^°]

    Ein Beispiel, um das Suchmuster in einem Script zu verwenden: https://codepen.io/ebody/pen/RwNOdbx

    Gruß ebody

    1. @@ebody

      Ich habe jetzt dieses Suchmuster verwendet, um den String auf nicht erlaubte Zeichen zu prüfen: [0-9!"§$%&\/()=?`´*+~'#_:,.;|<>@^°]

      Warum soll ? im Namen nicht erlaubt sein, ¿, ⁇, ❓ usw. aber doch?

      LLAP 🖖

      --
      „Man kann sich halt nicht sicher sein“, sagt der Mann auf der Straße, „dass in einer Gruppe Flüchtlinge nicht auch Arschlöcher sind.“
      „Stimmt wohl“, sagt das Känguru, „aber immerhin kann man sich sicher sein, dass in einer Gruppe Rassisten nur Arschlöcher sind.“

      —Marc-Uwe Kling
      1. ?? wäre z.B. nicht erlaubt. Rotes Fragezeichen im Namen?

        Das Suchmuster wird wahrscheinlich einige Namen (Vor- und Nachnamen) ausschließen, die idealerweise erlaubt sein sollten, aber denke die meisten Namen die für West Europa typisch sind, können verwendet werden.

        Wenn ich das perfekte Suchmuster hätte, bräuchte ich ja hier nicht fragen.

        Gruß ebody

        1. Hallo ebody,

          Wenn ich das perfekte Suchmuster hätte, bräuchte ich ja hier nicht fragen.

          Gunnars Antworten zusammengefasst: Es ist nicht sinnvoll, den Namen von Personen mit einem regulären Ausdruck validieren zu wollen.

          Bis demnächst
          Matthias

          --
          Du kannst das Projekt SELFHTML unterstützen,
          indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  4. Hi,

    wenn man einen Namen in ein Textfeld eingibt, soll dieser nach der Eingabe überprüft werden. Buchstaben, diakritische Zeichen (z.B. é, Ã) , Bindestrich, 1 Leerzeichen sollen erlaubt sein.

    Ich hab, da ich beruflich mit Namensvalidierungen der Schnittstellen unserer Geschäftspartner zu tun habe, schon so einiges an Namens-Varianten gesehen ...

    Z.B.

    nur Vorname und kein Nachname, nur Nachname und kein Vorname, Ziffer im Nachnamen (aber nix adeliges wie Louis XIV), Namen ohne Vokale ...

    Haben wir so erstmal nicht geglaubt, aber die Kunden konnten uns jeweils ein Photo/Scan vom Personalausweis/Paß vorlegen.

    Du erlaubst z.B. kein ' - O'Sullivan und viele andere irische Namen sind damit ausgeschlossen.

    Weiß jemand warum es in dem Tool funktioniert (was bisher immer sehr zuverlässig war) und in JS nicht?

    Daß \W im einen Tool "funktioniert", im anderen nicht, liegt daran, daß \w und das Gegenstück \W in den verschiedenen Regex-Engines unterschiedlichst implementiert sind.

    Mal trifft \w alle Buchstaben, mal nur die Buchstaben aus dem ASCII-Bereich, aber auch nur die Buchstaben aus ISO-8859-1 hab ich schon mal erlebt. Oder auch, daß \w Kombizeichen aus Akzent und Buchstabe trifft (also da, wo das nicht 1 Zeichen ist, sondern 2).

    cu,
    Andreas a/k/a MudGuard

  5. Probleme könnten erst dann auftreten wenn es möglich ist, über einen $namen Zeichen einzuschleusen die in $name selbst kein Problem sind aber evntl. da wo $name verarbeitet wird.

    In Fakt kommt es also auf die kontextgerechte Verarbeitung von $name an. Somit ist das Ausschließen bestimmter Zeichen in $name der falsche Ansatz.

    MFG