Regulärer Ausdruck für nicht mehr als zwei wiederholte Buchstaben/Ziffern
Habe ich eine Anforderung zu verarbeiten regulärer Ausdruck für nicht mehr als zwei gleiche Buchstaben/Ziffern in einer XSL-Datei.
- kein Platz
- keine spezielle chars
- Unterstützung (a-z,a-Z,0-9)
- erfordern, dass man von a-z
- erfordern, dass man von 0-9
- nicht mehr als 2 gleiche Buchstaben/Ziffern (d.h.,
BBB
fehlBB
angenommen)
Was ich bisher
(?:[^a-zA-Z0-9]{1,2})
- Muss es sein, einen regulären Ausdruck oder könnte eine Funktion, die true oder false zurückgibt OK sein?
- Was
AABAA
? - Oakley: ich habe eine Funktion, um zu überprüfen, um zu sehen, wenn die den Variablen entsprechen, die regex. die true oder false zurückgeben
- AABAA wird akzeptiert, solange nicht 3 hintereinander
- also mindestens einen Kleinbuchstaben und eine Ziffer ist erforderlich? sollte die Zeichenfolge beginnen ebenfalls mit einem (groß -) Brief oder nicht, egal?
- spielt keine Rolle, solange die regex erfüllen alle Anforderung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese regex wird es tun:
^(?!.*([A-Za-z0-9])\1{2})(?=.*[a-z])(?=.*\d)[A-Za-z0-9]+$
Hier ist die Aufteilung:
(?!.*([A-Za-z0-9])\1{2})
stellt sicher, dass keiner der chars wiederholen Sie mehr als zweimal in einer Zeile.(?=.*[a-z])
erfordert mindestens einen Kleinbuchstaben(?=.*\d)
erfordert mindestens eine Ziffer[A-Za-z0-9]+
erlaubt werden nur Buchstaben und ZiffernEDIT :
entfernt eine überflüssige
.*
aus dem negativen lookaheadA1D3E
(gültig) oderAAAA
(ungültig).A1D3E
ist ungültig.AABAA
gültigAABAA
gültig ist, aber das widerspricht der Anforderung, dass eine Ziffer ist erforderlich, auch. Ich glaube er meinte dieAABAA
Beispiel nur zu klären, die Wiederholung Anforderung nur. Verwirrend!(?!.*([A-Za-z0-9])\1{2})(?=.*[a-z]).{5,}
wie kann ich es machen passieren (ich benutze es für die Validierung) wenn die wiederholte Zeichen sind Teil von einem string? (z.B. "enthält AAA-Batterien" als einer Zeile passieren soll, mein Validierung)Zur Anpassung der dasselbe Zeichen wiederholte sich 3 oder mehr Male hintereinander versuchen:
Probe-matches (beide getestet hier und hier):
AABBAA
(keine Spiele)AABBBAAA
(entsprichtBBB
undAAA
),ABABABABABABABA
(keine Spiele)ABCCCCCCCCCC
(entsprichtCCCCCCCCCC
).([a-zA-Z0-3])\1{2,}
sollte wohl([a-zA-Z0-9])\1{2,}
Bedeutet dies eine Arbeit für Sie?
Probieren Sie es aus:
Ausgabe:
Sie können dies tun, in 2 regexes:
/^(?=.*[a-z])(?=.*[0-9])[a-z0-9]+$/i
Dies wird sicherstellen, dass es mindestens 1 Ziffer und 1 Buchstaben und akzeptiert nur Buchstaben und zahlen (keine Leerzeichen oder Sonderzeichen)/([a-z0-9])\1{2,}/i
Wenn diese abgestimmt ist, dann gibt es einen wiederholten Charakter. Das heißt, Sie sollten werfenfalse
.Erklärung:
Ersten regex:
^
: match beginnen der Linie(?=.*[a-z])
: überprüfen Sie, ob es mindestens einen Brief(?=.*[0-9])
: überprüfen, ob es mindestens eine Stelle[a-z0-9]+
: wenn die Prüfungen wahr ist, dann passen nur die Ziffern/Buchstaben ein-oder mehrmals$
: match-Ende der Zeilei
: Modifizierer, Spiel mit groß-und KleinschreibungZweite regex:
([a-z0-9])
: Spiel und Gruppe ein Buchstabe oder eine Ziffer\1{2,}
: match der Gruppe 1 mit zwei oder mehr mali
: Modifizierer, Spiel mit groß-und Kleinschreibung(?i)^(?=.*[a-z])(?=.*[0-9])[a-z0-9]+$
und(?i)([a-z0-9])\1{2,}
statt. Ich nahm an, dies ist die Reine JS...In der Antwort zu einer Klärung, so scheint es, dass ein einzelner regulärer Ausdruck ist nicht unbedingt erforderlich. In diesem Fall schlage ich vor, Sie verwenden mehrere reguläre Ausdrücke oder Funktionen. Meine Vermutung ist, Leistung ist nicht Voraussetzung, da in der Regel diese Arten von überprüfungen durchgeführt, die in Reaktion auf Benutzereingaben. Benutzereingaben-Validierung dauert 100ms und noch erscheinen werden, sofort, und Sie können führen Sie eine viel code in 100ms.
Zum Beispiel, ich persönlich würde dies eine Prüfung für jede Ihrer Bedingungen in einem separaten test. Prüfen Sie zunächst, für Räume. Zweitens, überprüfen Sie für mindestens einen Buchstaben. Prüfen Sie anschließend für mindestens eine Zahl. Schließlich, suchen Sie nach beliebigen Zeiträumen von drei oder mehr sich wiederholenden Zeichen.
Wird sich der code viel einfacher zu verstehen, und es wird viel leichter sein, ändern Sie die Regeln später (was die Erfahrung gezeigt hat, wird fast sicher passieren wird).
Beispiel:
Ich persönlich halte die oben, um Größenordnungen einfacher zu Lesen als einen komplexen regulären Ausdruck. Plus, hinzufügen oder entfernen in der Regel nicht machen, müssen Sie implementieren eine komplexe reguläre Ausdrücke (und somit erforderlich, um re-test aller möglichen Kombinationen).