3 Stimmen

regexp maximale Länge einschränken

Ich habe einen regulären Ausdruck wie diesen:

(\d+\.)+

es werden Zeichenfolgen wie 1.234.2421.222.11 implementiert Kann ich die maximale Länge der gesamten Zeichenfolge (nicht die Anzahl der Gruppen) begrenzen?

vielen Dank

7voto

Bart Kiers Punkte 160101

Beachten Sie, dass (\d+\.)+ stimmt nicht überein 1.234.2421.222.11 in seiner Gesamtheit. Ihr Muster schreibt vor, dass es mit einem . . Sie wollen wahrscheinlich ein Muster wie dieses:

\d+(\.\d+)*

Und um der Eingabezeichenkette eine maximale Länge zu geben, z.B. maximal 15 Zeichen, machen Sie so etwas wie dies:

^(?=.{0,15}$)\d+(\.\d+)*$

vorausgesetzt, Ihre Regex-Implementierung unterstützt Vorausschauen.

EDITAR

Okay, wenn Ihre Regex-Implementierung keine Vorausschau unterstützt, machen Sie es in zwei Schritten. Etwa so (Pseudo-Code):

if input matches ^\d+(\.\d+)*$ and ^.{0,15}$ do
  ....
end

oder, wie paxdiablo ebenfalls erwähnte, verwenden Sie die in Ihrer Programmiersprache integrierte Funktion, um die Länge der Zeichenkette zu ermitteln.

4voto

paxdiablo Punkte 809679

Wenn Ihre Regex-Engine Lookaheads unterstützt, können Sie etwas wie verwenden:

^(?=.{M,N}$)(\d+\.)*\d+$

(so festgelegt, dass kein nachgestelltes . Zeichen) und bettet damit die Längenprüfung in denselben Regex ein. Sie müssen ersetzen M y N mit der minimalen bzw. maximalen Größe.

Wenn Ihr Motor nicht so modern ist, dass er Suchköpfe hat, müssen Sie Folgendes tun zwei regex chacks:

^.{M,N}$
^(\d+\.)*\d+$

und stellen Sie sicher, dass er sie besteht beides. Die erste ist die Längenprüfung, die zweite die Inhaltsprüfung.

Aber Sie könnten feststellen, dass ein Regex für die Längenprüfung zu viel des Guten ist, es ist wahrscheinlich einfacher, die Stringlänge mit Length() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X