web-dev-qa-db-de.com

Regulärer Ausdruck, der Leerzeichen in einer Zeichenfolge zulässt, jedoch nicht nur Leerzeichen

Ich muss einen regulären Ausdruck für die Formularüberprüfung schreiben, der Leerzeichen innerhalb einer Zeichenfolge zulässt, aber nicht nur Leerzeichen zulässt.

Zum Beispiel wäre 'Chicago Heights, IL' gültig, aber wenn ein Benutzer die Leertaste beliebig oft drückt und die Eingabetaste drückt, wird das Formular nicht bestätigt. Vor der Validierung habe ich versucht, eine if (foo != null) auszuführen, dann den Regex auszuführen, aber durch Drücken der Leertaste werden immer noch Zeichen registriert, sodass dies nicht funktioniert hat. Hier ist was ich gerade verwende, was die Leerzeichen erlaubt:

^[-a-zA-Z0-9_:,.' ']{1,100}$
12
user699242

Ich bin nicht sicher, ob Sie hier eine RegEx brauchen. Warum rufen Sie nicht einfach die Methode Trim() Ihrer Sprache an und stellen Sie dann sicher, dass die resultierende Zeichenfolge nicht leer ist.

16
dlev

Es ist sehr einfach: .*\S.*

Dies erfordert an jeder Stelle ein Zeichen ohne Leerzeichen. Die Syntax für reguläre Ausdrücke gilt für Perl 5-kompatible reguläre Ausdrücke. Wenn Sie eine andere Sprache verwenden, kann die Syntax etwas abweichen.

32
Roland Illig

Folgendes wird Ihre Frage wie geschrieben beantworten, aber danach meine zusätzliche Anmerkung:

^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$

Erläuterung: Der (?!\s*$) ist ein negativer Lookahead . Es bedeutet: "Die folgenden Zeichen können nicht mit dem Untermuster \s*$ übereinstimmen." Wenn Sie das Teilmuster berücksichtigen, bedeutet dies: "Die folgenden Zeichen können weder eine leere Zeichenfolge noch eine Zeichenfolge mit Leerzeichen bis zum Ende sein. Daher muss nach diesem Punkt mindestens ein Nicht-Whitespace-Zeichen vorhanden sein die Saite." Wenn Sie diese Regel nicht mehr zur Verfügung haben, können Sie Leerzeichen in Ihrer Charakterklasse zulassen.

Zusätzliche Anmerkung: Ich glaube nicht, dass Ihr ' ' das tut, was Sie beabsichtigen. Anscheinend haben Sie versucht, ein Leerzeichen darzustellen, aber Regex interpretiert ' als wörtlichen Apostroph. Innerhalb einer Zeichenklasse würde ' ' bedeuten, dass "mit jedem Zeichen übereinstimmt, das entweder ', ein Leerzeichen oder ' ist" (beachten Sie, dass das zweite '-Zeichen überflüssig ist). Ich vermute, was Sie wollen, ist eher so:

^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
6
Justin Morgan

Sie könnten einfach verwenden:

^(?=.*\S).+$

wenn Ihre Regex-Engine positive Lookaheads unterstützt. Dieser Ausdruck erfordert mindestens ein Zeichen ohne Leerzeichen.

Siehe auf rubular .

5
Alex

Wenn wir Validierungen nur mit zulässigem Zeichensatz anwenden wollten, habe ich es mit USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/; versucht.

  • Eine Zeichenfolge kann eine beliebige Anzahl von Leerzeichen am Anfang oder am Ende oder dazwischen enthalten, enthält jedoch mindestens ein alphanumerisches Zeichen.
  • Optionale ., _ , --Zeichen sind ebenfalls zulässig, aber die Zeichenfolge muss ein alphanumerisches Zeichen enthalten.
0
Sandeep Sharma