Beispiele:Wie Regex für zwei beliebige Zahlen nicht beide Null?
01 = match
10 = match
99 = match
00 = no match
Bisher habe ich dies: /^ [1-9][0-9] | [0-9][1-9] $/
aber ich habe das Gefühl, es optimiert werden kann.
Beispiele:Wie Regex für zwei beliebige Zahlen nicht beide Null?
01 = match
10 = match
99 = match
00 = no match
Bisher habe ich dies: /^ [1-9][0-9] | [0-9][1-9] $/
aber ich habe das Gefühl, es optimiert werden kann.
Sie können eine negative Vorschau verwenden, um ein generischen [0-9]{2}
Muster zu beschränken:
^(?!00)[0-9]{2}$
die regex demo
Die [0-9]{2}
wird genau 2 Stellen anzeigen lassen. Der (?!00)
negative lookahead wird einmal am Anfang des Strings ausgeführt und stellt sicher, dass es bis zum Ende des Strings keine 00
gibt. Wenn die Zeichenfolge gleich 00
ist, wird keine Übereinstimmung gefunden.
Weitere Informationen finden Sie unter How Negative Lookahead Works.
Eine detaillierte Muster Erklärung:
^
- Beginn der Zeichenfolge(?!00)
- ein negativer Look-Ahead, die das Spiel schlägt fehl, wenn es zwei 0
s direkt nach der aktuellen Position ist (am Anfang der Zeichenfolge). Da das nächste Untermuster - [0-9]{2}$
- nur 2 Symbole in der Zeichenfolge zulässt, müssen wir keinen Anker in den Lookahead einfügen. In anderen Szenarien ist es ein Muss, $
hinzuzufügen, um einfach 00
ausschließen zu können.[0-9]{2}
- genau zwei (dank der Begrenzung quantifier {min(,max)?}
) Ziffern (in den meisten Aromen, [0-9]
mit \d
ersetzt werden, aber die \d
kann auch mehr als normale []
in einige der Aromen entsprechen)$
- Ende String (abhängig von der Regex-Geschmack, \z
kann vorzuziehen sein, da es die sehr Ende der Zeichenfolge entspricht).dieses RegEx Versuchen:
(?!00)\d\d
Dieses eine Negative Lookahead verwendet (hier ist ein nice answer es zu erklären), (?!)
. Das bedeutet, was auch immer innen ist, passt nicht zusammen. In diesem Fall erkennt es, ob 00
vorhanden ist, und schlägt fehl, wenn dies der Fall ist.Wenn nicht, wählen Sie 2 Ziffern (\d
ist eine Abkürzung für [0-9]
)
Eine sicherere Version:
^(?!00)\d\d$
Dies nutzt auch ^
, in dem es heißt, dass die Daten sein müssen am Anfang der Zeichenfolge (oder Zeile mit dem m
Flag) und $
müssen die Daten am Ende sein. Deshalb, wenn Sie ^ $
verwenden, innerhalb der Daten die volle Linie/string
Hier sind einige Beispiele für negative Vorschau übereinstimmen: (?! 00)
# Using the RegEx (?!9)\d
1 # Match
2 # Match
5 # Match
9 # NO MATCH
# Using the RegEx (?!Tom)\w+
Tim # Match
Joe # Match
Bob # Match
Tom # NO MATCH
# Using the RegEx (?!Foo)\w+(?!Bar)
BarBazFoo # Match
BazBarFoo # Mtach
FooBarBaz # NO MATCH
BazFooBar # NO MATCH
'\ d \ d' wird auch match '99' in' 9900'. –
@ WiktorStribiżew Ich dachte, es gäbe nur 2 Ziffern, zumal du '{2}' in deiner Antwort benutzt hast. Wenn dies der Fall ist, wird '9900' niemals existieren. Aber danke für die Information! – Druzion
Ein begrenzender Quantifizierer gibt nicht an, wie viele Zeichen in der Eingabe enthalten sein sollten, sondern wie viele der vorherigen Untermuster übereinstimmen können. –