JavaScript Formularvalidierung - auf Komma prüfen?

Dsimon24

Lieutenant
Registriert
Aug. 2016
Beiträge
595
Moin zusammen,

ich brauche mal kurz einen Tipp. Leider kann ich dazu im Bereich der
JS-Validierung nicht viel finden. Vielleicht suche ich aber auch falsch.

Also, mittels document.getElementById("ansprechpartner").required = true;
prüfe ich, ob ein entsprechenden Input-Feld in meinem Formular ausgefüllt wurde.
Wie kann ich denn prüfen, ob in diesem Feld auch u.a. ein Komma vorhanden ist?
Dann möchte ich, dass eine entsprechende Meldung erscheint, ähnlich, als wäre
das Feld nicht ausgefüllt.

VG, David
 
Mihawk90 schrieb:
https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation

Dort ist alles was man zur Validierung wissen muss, inklusive Beispielen.

Ich denke mal, da komme ich mit pattern weiter, so wie ich es jetzt
verstanden habe!? Aber hauptsächlich sehe ich nur Fragezeichen...

Ist auch nur ein kleines Formular.
Da prüfe ich mittels einer if-Abfrage den Wert eines Checkbox.
Demnach setze ich das Feld dann 'ansprechpartner' auf required:

document.getElementById("ansprechpartner").required = true;

Nur, wenn ich es per JS auf true gesetzt habe, möchte ich auch prüfen,
ob innerhalb des Wertes im Input-Feld auch ein Komma vorhanden ist.
Wenn ja, dann gut - wenn nein, dann Meldung. Geht das so einfach?
 
Du kannst doch nach setzen des required Attributes auf die gleiche Weise auch noch ein pattern anfügen. Vor absenden wird das dann vom Browser geprüft.
 
Oder lasse ich mit pattern nur ein Komma zu, falls eins vorhanden ist? Habe ich da gerade einen Denkfehler?
 
Das pattern ist eine RegEx, die auf den Text angewendet wird. Wenn sie matcht, wird abgesendet, wenn nicht, dann nicht. Das pattern musst du dir anhand deiner Anforderungen schon selbst basteln. Gibt ja genügend Seiten um was zu testen, regex101.com, regexpal.com, sind nur 2 Beispiele. Wenn du dich mit RegEx nicht auskennst ist es ein guter Zeitpunkt dich einzulesen, die wirst du immerwieder brauchen, und beide Seiten haben eine Mini-Dokumentation die beim basteln hilft.
 
Dann muss ich mir das wirklich mal genauer ansehen. Dennoch muss ich das jetzt schnell fertig bekommen :D

Also: document.getElementById("ansprechpartner").pattern = "/,/g";

/,/g habe ich aus regextester.com - Gebe ich dann auf der Seite einen
Namen ein ohne Komma, gibt´s kein Match - mit Komma gibt´s dann
ein Match. Müsste doch so sein, oder? Funktioniert nämlich nicht.

Also, er lässt mich weder ohne, noch mit Komma zwischen Vorname und Nachname weiter.
 
Zuletzt bearbeitet:
Das Pattern muss aber nicht nur ein einzelnes Zeichen matchen, sondern den gesamten String.
Mit /,/g wird ausschließlich ein Komma gematcht, in dem String dürfte also nichts anderes enthalten sein um "komplett" gematcht zu werden. Du müsstest also ein pattern verwenden, das zusätzlich noch alles vor und nach dem Komma matcht.

Und laut der pattern Dokumentation sollen auch keine Flags angegeben werden, sondern ausschließlich die RegEx:
No forward slashes should be specified around the pattern text.
 
Aber dann müsste ich ja hiermit richtig funktionieren, oder?:

document.getElementById("ansprechpartner").pattern
= "[a-zA-züöäÜÖÄß ], [a-zA-züöäÜÖÄß ]";

Nachname, (<- Komma) Vorname
 
Für deutsche Vor- und Nachnamen, die nur 1 Zeichen lang sind, sollte das funktionieren, ja. Btw: " , " (also Leerzeichen-Komma-Leerzeichen-Leerzeichen ist auch ein schöner Name :D
Was machst du mit Franzosen, Russen, Griechen, Chinesen, etc? Und wenn der Name mal länger als 1 Zeichen sein sollte?
 
  • Gefällt mir
Reaktionen: Mihawk90
Theoretisch ja, dann hast du aber das Problem, dass Namen mit Sonderzeichen (André) oder Doppelnamen (Max-Peter) nicht gehen.
Außerdem würdest du damit nur einen Buchstaben vor und nach dem Komma matchen. Du brauchst also noch einen Quanitifier. Wenn du sicher gehen willst, dass immer beide angegeben sind bietet sich + an (1 Zeichen oder mehr).

Besser ist es da nicht auf spezielle Zeichen zu beschränken, sondern zum Beispiel \S ("any non-whitespace character") zu verwenden:
https://regex101.com/r/D1rC1c/3
 
Zuletzt bearbeitet:
was du brauchst, ist "beliebig viel Krempel, dann Komma, dann beliebig viel Krempel", nicht "Buchstabe, Komma, Buchstabe".
 
Ich schreib gleich einfach da rein: Bitte <Nachname>, <Vorname> eingeben! Ich werd da nicht schlau draus. :D
 
Ja, aber du machst ja nicht umsonst eine Validierung... reinschreiben kannst du da viel, die Validierung dient ja dazu deine Vorgaben auch umzusetzen.
Beispiel ist in meinem regex101-Link oben.
 
Du wirst nicht umhin kommen, dich früher oder später mit regulären Ausdrücken auseinanderzusetzen. Dann überleg dir als nächstes, ob die Anforderung, dass in der Mitte ein Komma stehen muss, überhaupt sinnvoll ist oder ob es als ganzes in die Datenbank kann. Als nächstes tu das, was dir @Mihawk90 geraten hat: du musst sämtliche Validierungen (auch) auf Serverseite durchführen, sonst kannst du dir den Aufwand, darüber nachzudenken, direkt schenken.
 
  • Gefällt mir
Reaktionen: Mihawk90
Ein Feld "Ansprechpartner" ist fragwürdig, v.a. in der Form getrennt durch ein Komma. Da wirst du allerlei Eingaben haben, die verkehrt sind.

Was machen, wenn der Vorname nicht bekannt ist? "Nachname," ? Damit es validiert wird, geben die Leute dann Schrott ein. Und was ist mit Doppelnamen? Was ist mit Leuten, die eher formal unterwegs sind und dann "Herr" eingeben? Deshalb würde ich einfach ein Feld für Nachname und eins für Vorname machen. Und einfach nur schauen, ob der Nachname befüllt ist. Einziges Problem sind dann Namen, die anders funktionieren, chinesische oder so. Aber auch dazu wirft Google genug Best Practice aus. Zusätzliche Validierung im Backend natürlich nicht vergessen.
 
Tu dir selbst nen Gefallen und mach zwe Felder draus. Das zu matchen ist schon total assig weil jemand zwanzig Vornamen haben kann und der Spanier auch mal (eigentlich immer) zwei Nachmamen. Also außer Sonderzeichen und Zahlen rauszumatchen kannste da nicht viel machen...
 
Zurück
Oben