2016-03-22 20 views
2

Ich brauche einen regulären Ausdruck (in einem Wettbewerb tatsächlich) für einen Benutzernamen zu schreiben, so dassFehler in Regulärer Ausdruck

  1. Der Benutzername alphanumerische Zeichen enthalten und/oder Unterstrichen (_).

  2. Der Benutzername muss mit einem alphabetischen Zeichen beginnen.

  3. 8 ≤ | Benutzername | 30. ≤

Nun ist die regex ich geschrieben habe, ist

String pattern = „(^ [a-zA-Z] [a-zA-Z0-9 _] {8,30} $) ";

Es ist in einigen der Testfälle und die richtige Lösung des Problems „wird

Besaitungsbild Fehler zeigt = (^ [a-zA-Z] [a-zA-Z0-9 _] {7 , 29} $) ";

Jetzt kann ich nicht verstehen, warum {7,29} anstelle von {8,30} verwendet wird, weil der Benutzername zwischen 8 und 30 Zeichen lang sein muss?

Und die andere Frage, warum ist es notwendig, am Anfang zu geben^und $ bei der Expression zuletzt? (Ich weiß, dass sie als Grenzen handeln, aber konnte nicht verstehen, wie? Also, wenn jemand erklären könnte)

+2

das ist, weil Sie ar Wir benutzen bereits '[a-zA-Z]' einmal für den Anfang. Also müssen Sie in der folgenden Regex für 1 weniger übereinstimmen – Kamehameha

+1

Verwenden Sie auch ein Werkzeug wie [regex101] (https://regex101.com/r/eN7jT8/1), um mehr Klarheit darüber zu bekommen, was die Regex bedeutet. – Kamehameha

+1

Waow..Danke eine Tonne. @ Kamehameha .. :) –

Antwort

1

hier ist Ihre korrekte Regex:

^[a-zA-Z][a-zA-Z0-9_]{7,29}$ 

die {7,29} quantifier auf den Charakter bezieht sich [a-zA-Z0-9_] entsprechen. Dies bedeutet, dass zwischen 7 und 29 (einschließlich) dieses Charakters vorhanden sein muss. Außerdem gibt es ein erstes Zeichen, das mit [a-zA-Z] übereinstimmen muss. Wenn Sie diesen Bereich hinzufügen, erhalten Sie zwischen 8 und 30 Zeichen (inklusive).

Für Ihre zweite Frage, die ^ und $ Symbole sind Grenzmarkierungen, markieren den Beginn (^) und Ende ($) des Spiels. Wenn Sie diese Markierungen nicht verwenden würden, würde Ihre Regex auch die Wörter länger als als 30 Zeichen enthalten, solange eine Teilzeichenfolge dieses Wortes das Muster enthält, dem Ihre Regex entspricht.

Hier ist eine Demo regex, die eine Zeichenfolge länger als 30 Zeichen Ihr Muster zeigt, dass übereinstimmen, wenn wir die Grenzmarkierungen entfernen:

Regex101

Versuchen Hinzufügen der Grenzmarkierungen (^ und $) wieder und Sie werden sehen, dass es dann scheitern wird.

+0

eine Sache, aber seit ich die Grenzen gab, indem ich {7,29} schrieb. Wird dies nicht als Grenze wirken? –

+1

Es wird nicht ohne '^' und '$' das Spiel zu beschränken. Der Grund dafür ist, dass es nur bedeutet, dass es 8 bis 30 bestimmten Zeichen entsprechen muss, aber es besagt nicht, dass die übereinstimmende Zeichenfolge nicht länger als das sein kann. –

+0

Ok..Ich habe es jetzt..Danke Tim. :) –

1
^[a-zA-Z][a-zA-Z0-9_]{7,29}$ 

Hier ist, wie Sie Ihre Regex lesen.^ = der Anfang der Zeichenfolge, [a-zA-Z] =, gefolgt von einem beliebigen Kleinbuchstaben zwischen a bis z oder einem beliebigen Großbuchstaben zwischen A bis Z, [a-zA-Z0-9_]{7,29} =, gefolgt von einem beliebigen Kleinbuchstaben zwischen a bis z oder einem beliebigen Großbuchstaben zwischen A bis Z oder einem beliebigen anderen Zeichen Ziffernanzahl zwischen 0 bis 9 oder ein Unterstrich (mindestens 7-mal bis maximal 29-mal vorkommen, $ = gefolgt vom Ende der Zeichenfolge

Es ist einfacher zu verstehen, wenn Sie versuchen, es zu sagen "this" gefolgt von "this" gefolgt von „this“ .... etc ...

Sobald Sie es verstehen, haben Sie die Antwort auf Ihre Frage.

+0

Aha..Ich habe es..Danke Tech. :) –