3 Stimmen

Knifflige reguläre Ausdrücke

Ich muss nur alphanumerische Zeichen (mit Großbuchstaben) von 0-25 Zeichen Länge und keine faulen, sich wiederholenden numerischen Werte zulassen.

Ich habe den ersten Teil: Regex.IsMatch(tmpResult, "^[0-9A-Z]{0,25}$"); (das ist einfach)

111112 - Streichholz
AABD333434 - Spiel
55555555 - keine Übereinstimmung
555 - keine Übereinstimmung

Kann mir bitte jemand helfen?

5voto

kennytm Punkte 488916
^(?!(.)\1*$)[0-9A-Z]{0,25}$

Das Extra (?!(.)\1*$) weist alle Zeichenfolgen zurück, die aus sich wiederholenden gleichen Zeichen bestehen.

El (?!…) ist eine negative Vorausschau die dazu führt, dass die primäre Regex fehlschlägt, wenn die übereinstimmt, und die (.)\1* passt auf eine Kette von sich wiederholenden Zeichen.

0voto

gnomed Punkte 5249

Sie könnten es einfach mit einer normalen Methode machen... Sobald Sie es mit Ihrem ersten Ausdruck dort übereinstimmen, verwenden Sie einfach eine Unterroutine, um durch jedes Zeichen zu iterieren und geben Sie true zurück, wenn Sie das erste Mal auf ein Zeichen stoßen, das sich vom ersten in der Zeichenfolge unterscheidet.

Es sollte true zurückgeben, nachdem es nur die ersten 2 Zeichen auf Die meisten Zeichenfolgen, es sei denn, es handelt sich um eine ungültige Zeichenfolge.

Dies sollte genauso schnell sein wie ein Regex, wenn nicht sogar schneller, wenn es gut implementiert ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X