Die Zeichenlänge in regulären Ausdrücken
durchsetzen reguläre Ausdrücke benötigen häufig Längenbeschränkungen. Ohne sie stimmt ein Regex in jeglicher Länge überein. Während Quantifizierer die Lösung (z. B. {1,15}
) erscheinen, funktionieren sie nicht direkt auf der gesamten Saite. Dies liegt daran, dass Quantifizierer nur das unmittelbare vorhergehende Element beeinflussen.
zum Beispiel schlägt dieser Versuch fehl:
<code class="language-javascript">var test = /^(a-z|A-Z|0-9)*[^$%^&*;:,?()""']*${1,15}/ // Error!</code>
Die Lookahead -Lösung
Der korrekte Ansatz verwendet eine positive Aus Lookahead -Behauptung:
<code class="language-javascript">^(?=.{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$</code>
Verständnis der Lookahead
(?=.{1,15}$)
ist der Schlüssel. Dieses positive Lookahead behauptet, dass die gesamte Zeichenfolge (von Anfang an ^
bis zum Ende $
) zwischen 1 und 15 Zeichen (.{1,15}
) enthält. Es verbraucht keine Zeichen; Es überprüft nur den Zustand. Der Rest des Regex stimmt dann mit den zulässigen Zeichen in dieser Längenbeschränkung überein. [a-zA-Z0-9]*[^$%^&*;:,?()""']*$
Neuleitungen
Wenn Ihre Saiten neue Zeichen enthalten, verwenden Sie eine robustere Zeichenklasse, um zu einem beliebigen Charakter zu passt, einschließlich Neulinen:
<code class="language-javascript">^(?=[\s\S]{1,15}$)[a-zA-Z0-9]*[^$%^&*;:,?()""']*$</code>
entspricht jedem Whitespace- oder Nicht-Whitespace-Charakter. Dadurch wird sichergestellt, dass die Längenprüfung auch bei Multiline -Eingang korrekt funktioniert. Dies liefert eine zuverlässige Methode zur Durchsetzung von Charakterlängengrenzen in regulären Ausdrücken. [sS]
Das obige ist der detaillierte Inhalt vonWie kann ich Zeichenlängenbeschränkungen in regulären Ausdrücken erzwingen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!