2016-04-20 6 views
2

Der folgende Ausschnitt stammt aus einem Buch über HTML5:Ist das Parathensis in Regex in HTML5 notwendig?

<label for="zip">US Zip code</label> 
<input id="zip" name="zip" pattern="[\d]{5}(-[\d]{4})"> 

ich denke, die Parathensis in [\d]{5}(-[\d]{4}) redundant ist, was bedeutet: [\d]{5}(-[\d]{4}) gleich zu [\d]{5}-[\d]{4}

Ist es richtig?

+0

Bis Sie es erfassen möchten, ist es nutzlos – rock321987

+0

Parenthese sind Muster in regulären Ausdrücken. Diese Muster werden durch einen anderen Inhalt ersetzt. Es ist also kein mathematischer Operator, es ist eine nützliche Technik. –

+1

Genau so sind auch die Zeichenklassen. Es scheint, dass der Autor des Buches Klammern gerade mag. Das Muster kann vereinfacht werden zu '\ d {5} - \ d {4}' (die geschweiften Klammern sind die einzigen, die hier nützlich sind). – BoltClock

Antwort

1

Vor allem der Charakter Klassen in Ihrem Muster sind ziemlich redundant und können zu weiteren Problemen führen, die sich aus Missverständnissen ergeben, wie Charakterklassen funktionieren.

Faustregel ist nicht etwas zu verwenden, wenn Sie nicht müssen. So "vereinfachen" Sie das Muster zu \d{5}(-\d{4}).

Ein Paar von nicht verkabelten Klammern wie das in Ihrem Muster wird verwendet, um group and capture (setzen Sie ein Sub-Match in einen Speicher-Puffer für jede solche Gruppe zugeordnet).

So \d{5}(-\d{4}) Einstimmungen 5 Stellen von Anfang der Zeichenfolge (da das Musterattribut regex beidseitig mit ^(?: und )$ standardmäßig verankert ist), und dann übereinstimmt, und legen den Bindestrich und 4 Ziffern am Ende der Zeichenfolge in den Speicherpuffer # 1 so, Erstellen einer Gruppe, die mit einem backreference bezeichnet werden kann.

Eine Rückreferenz in einem Muster wird mit \n Syntax angegeben, wobei n die Erfassungsgruppen-ID ist. Um also Text zu finden, der zuvor in demselben Muster gefunden wurde, können wir diese Rückwärtsreferenzen verwenden. Es ist nützlich, wenn Sie nach doppelten Werten in der Zeichenfolge suchen müssen. Sag mal, wollen Sie Strings validieren, die mit den gleichen zwei Ziffern beginnen und enden: pattern="(\d{2}).*?\1":

<form> 
 
<input pattern="(\d{2}).*?\1" message="2 digits at the start and end should be identical!" /> 
 
<input type="submit"/> 
 
</form>

Außerdem können Sie nutzen Gruppierung (beide Erfassung (...) und Nicht-Erfassung (?:...)) um mehrere Vorkommen von spezifischen Sequenzen zu vergleichen. Angenommen, Sie möchten 2 Sequenzen von abc + 3 Ziffern zusammenbringen. Sie würden dann (abc\d{3}){2} verwenden.

1

runden Klammern für Capture-Gruppe verwendet werden, wenn Sie nicht Einfanggruppen verwenden, es ist in Ordnung, sie zu entfernen

Um sicher zu sein, habe ich versucht, auf dieser Seite http://www.regexr.com/

+0

Ich denke schon. Aber das ist HTML5, wie können Sie eine Erfassungsgruppe verwenden? –

+0

Ich habe die offizielle Dokumentation (w3c) überprüft, kann aber nicht herausfinden, wie Capture-Gruppen zu verwenden sind. Ich denke, es wird immer JS benötigt, um sie zu verwenden. – Pietro

+0

Klammern können für mehr als nur Capturen verwendet werden. – BoltClock