Die Ausführung in einem Eingabeaufforderungsfenster findstr /?
gibt die Hilfe für diesen Befehl aus.
Die Suche regulärer Ausdruck bedeutet:
^
... einen String findet bei einer
[0-9]
... Zeile beginnen, die mindestens 1 Stelle
[0-9]*
hat ... und kann haben 0 oder mehr Ziffern
$
... und endet am Ende der Zeile.
In anderen Worten, die Ausgangsleitung von ECHO muss 0
auf Umgebungsvariable ERRORLEVEL
zugewiesen für eine positive Übereinstimmung mit Exit-Code hat 1 oder mehr Ziffern und keinen anderen Charakter. Jede andere Zeichenfolge in der Ausgabezeile führt zu keinem Übereinstimmungs- und Beendigungscode 1
.
Die erste [0-9]
wird benötigt, um sicherzustellen, dass die Benutzereingabe aus mindestens 1 Ziffer besteht. Andernfalls würde eine leere Zeile auch zu einer positiven Übereinstimmung führen. FINDSTR unterstützt keinen Multiplikator +
, der in anderen Anwendungen mit Unterstützung für reguläre Ausdrücke 1 oder mehr des vorherigen Zeichens oder der Zeichenklasse oder des Ausdrucks bedeutet.
Nun, eine nicht definierte userinput
würde in Ausgabe ECHO is OFF
oder ECHO is ON
führen durch FINDSTR zu verarbeiten, wenn userinput
nicht vor set /P "userinput=prompt text: "
definiert wurde und der Benutzer trifft nur RETURN oder ENTER. Aus diesem Grund würde ^[0-9]*$
auch hier zufällig funktionieren, da es hier nicht dazu kommt, dass FINDSTR eine Leerzeile verarbeiten muss.
Aber FINDSTR hat einige unerwartete übereinstimmende Verhalten.Zum Beispiel [0-9]
Streichhölzer auch ²
und ³
auf aktuelle Codepage je finden What are the undocumented features and limitations of the Windows FINDSTR command? Daher wäre es besser, die Validierung verwenden regulärer Ausdruck:
^[][]*$
Diesen Ausdruck nicht so kompakt wie ^[0-9][0-9]*$
aussieht, aber ist besser für die Benutzereingabevalidierung .
Bitte beachten Sie, dass selbst wenn die Benutzereingabe diesen Test besteht, die eingegebene Zahlenfolge für die weitere Verarbeitung in einem arithmetischen Ausdruck ungültig sein könnte, z. B. wenn der Benutzer 45829413953053
eingibt. Diese Zahl ist zu groß für eine 32-Bit-Ganzzahl mit Vorzeichen, die nur Zahlen im Bereich -2147483648
bis 2147483647
unterstützt.
Da sonst eine leere Zeichenfolge übereinstimmen würde. – melpomene
@trincot 'findstr' unterstützt' + 'nicht. – melpomene