• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

RegEx auf Input anwenden, jedoch auch leere inputs durchlassen

SaFle

New member
Moin Moin liebe Gemeinde,

ich hätte da gerne ein Problem. Nachdem ich bei meinem letzen großen Problem durch euch den Initialzünder gefunden habe (meine Buchhaltung läuft seitdem einwandfrei und der Fiskus hatte auch noch nichts zu beanstanden :D), wende ich mich wieder an euch.

Folgendes: Ich verwende bei meinem Projekt ein AnfrageFormular, welches ich zur usability vor dem Ajax-Request prüfen möchte.

Code:
checkCompany = new RegExp('^[a-zA-Z0-9 /ßüäöÜÄÖ-]+$');
		if (!checkCompany.test(bookingCompany)) {......

Im falle, das der Suchstring nicht zutrifft, wird das Feld markiert und der Request nicht gesendet. Das klappt wunderbar. Nun müssen zwar nicht alle Felder ausgefüllt werden, aber die die ausgefüllt werden, sollen kontrolliert werden. Jedoch markiert er das Feld auch bei leeren Eingaben.
Könnt ihr mir einen Tipp geben, wonach ich suchen kann, oder einen Hinweis auf einen entsprechenden Lösungsansatz?

Nebenbei: Die Eingaben prüfe ich natürlich Serverseitig noch auf das nötigste, da die Seite aber nur mit JavaScript funktioniert, vernachlässige ich bewusst die allzukleinliche Prüfung. Ich will lediglich den Benutzer darauf hinweisen, das er nicht gültige Zeichen eingegeben hat. Damit erspar ich mir das manuelle korrigieren in wichtigen Eingaben.
 
Setz doch um das Regex herum eine Abfrage auf "" und wenn das true ist prüfe garnicht erst weiter sondern lasse durch.
 
Es gibt in JS dafür sogar eine Abkürzung:
Code:
if (bookingCompany && !checkCompany.test(bookingCompany)) {......
 
Korbinian, wäre bookingCompany nicht auch dann false, wenn sein Inhalt die Ziffer 0 wäre?
HTML:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="test"></div>
<script>
var test1 = '';
var test2 = 0;
var test3 = '0';
var test4 = parseInt('0',10);
if (test1) { alert('test1 true') }
else { alert('test1 false') }
if (test2) { alert('test2 true') }
else { alert('test2 false') }
if (test3) { alert('test3 true') }
else { alert('test3 false') }
if (test4) { alert('test4 true') }
else { alert('test4 false') }
</script>
</body>
</html>
Nur 3 ist true, weil JS es nicht als Zahl ansieht und sich die Abfrage deshalb auf if != "" bezieht. Der Rest ist false - im IE11 zumindest - obwohl 2 und 4 durchaus zulässige Eingaben sein könnten.
Von daher wäre ich extrem vorsichtig mit der unspezifizierten Abfragerei auf true oder false bei Eingabefeldern. Sowas kann einem beim testen auch schnell mal durchflutschen, weil man nicht an alle erlaubten Kombinationen im Eingabefeld denkt.
 
Wenn der Wert aus einem Eingabefeld kommt, ist das immer ein String und nur der leere String wird zu false interpretiert. Und wenn man den leeren String in parseInt() jagt, bekommt man NaN, was man dann mit isNaN() testen muss.

Aber wenn man schon mit "" vergleicht, muss man das auf jeden Fall mit === oder !== machen, denn sonst bekommt man wirklich seltsame Ergebnisse:
Code:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="test"></div>
<script>
var test1 = '';
var test2 = 0;
var test3 = '0';
var test4 = parseInt('0',10);
if (test1 == "") { alert('test1 true') }
else { alert('test1 false') }
if (test2 == "") { alert('test2 true') }
else { alert('test2 false') }
if (test3 == "") { alert('test3 true') }
else { alert('test3 false') }
if (test4 == "") { alert('test4 true') }
else { alert('test4 false') }
</script>
</body>
</html>
 
Zurück
Oben