Ich habe folgende Voraussetzungen für die Validierung eines Eingabefeldes:
Ich verwende folgende Regex dafür:
%Vor%Aber das erlaubt Räume am Anfang. Jede Hilfe wird geschätzt.
Für mich ist der einzige logische Weg, dies zu tun:
%Vor% Am Anfang der Zeichenfolge muss mindestens ein Buchstabe stehen. (Ich habe Ihre [a-zA-Z]
durch die Unicode-Code-Eigenschaft für die Buchstaben \p{L}
ersetzt). Dann kann ein Leerzeichen folgen, gefolgt von mindestens einem Buchstaben, dieser Teil kann wiederholt werden.
\p{L}
: jede Art von Buchstaben aus jeder Sprache. Siehe regulary-expressions.info
Das Problem in Ihrem Ausdruck ^(?!\s*$)
ist, dass Lookahead fehlschlägt, wenn nur whitespace bis zum Ende der Zeichenfolge vorhanden ist. Wenn Sie führende Leerzeichen nicht zulassen möchten, entfernen Sie einfach das Ende des String-Ankers im Lookahead == & gt; %Code%. Dies erlaubt jedoch weiterhin, dass die Zeichenfolge mit Leerzeichen endet. Um dies zu vermeiden, schauen Sie zurück zum Ende der Zeichenkette ^(?!\s)[-a-zA-Z ]*$
. Aber ich denke, für diese Aufgabe braucht man sich nicht umzusehen.
Dies sollte funktionieren, wenn Sie es mit String.matches
Methode verwenden. Ich nehme an, Sie wollen Englisch Alphabet.
Beachten Sie, dass \s
alle Arten von Leerzeichen erlaubt. In Java wäre dies äquivalent zu
Dazu gehören horizontale Registerkarte (09), Zeilenvorschub (10), Wagenrücklauf (13), Seitenvorschub (12), Rücktaste (08), Leerzeichen (32).
Wenn Sie ausdrücklich nur Platz (32) zulassen möchten:
%Vor% Sie können die obige Regex weiter optimieren, indem Sie die erfassende Gruppe ( +[a-zA-Z]+)
nicht erfassend machen (mit String.matches
, die Sie nicht erhalten können Worte sowieso einzeln). Es ist auch möglich, die Quantifizierer so zu ändern, dass sie possessive sind, da es keinen Sinn hat, hier zurück zu laufen.
Versuchen Sie Folgendes:
%Vor%Dieser Ausdruck verwendet negatives Lookahead und negatives Lookbehind um Leerzeichen am Anfang oder am Ende der Zeichenfolge zu sperren und die Übereinstimmung der gesamten Zeichenfolge zu erfordern.
Ich denke, das Problem ist, dass es ein? vor der Negation von Leerzeichen, was bedeutet, dass es optional ist
Das sollte funktionieren:
%Vor%mindestens eine Buchstabenfolge, dann optionale Zeichenfolge mit Leerzeichen, endet aber immer mit Buchstaben
Ich weiß nicht, ob Wörter in Ihrer akzeptierten Zeichenfolge durch mehr als ein Leerzeichen getrennt werden können. Wenn sie können:
%Vor%Wenn nicht:
%Vor%String muss mit Buchstaben (oder wenigen Buchstaben) beginnen, nicht mit Leerzeichen.
String kann wenige Wörter enthalten, aber jedes Wort neben dem ersten muss Leerzeichen davor enthalten.
Ich hoffe, ich habe geholfen.