Regulärer Ausdruck, um die Anzahl der Zeichen auf 10 zu begrenzen

187

Ich versuche, einen regulären Ausdruck zu schreiben , der nur Kleinbuchstaben und bis zu 10 Zeichen zulässt. Was ich bisher habe, sieht so aus:

pattern: /^[a-z]{0,10}+$/ 

Dies funktioniert nicht oder kompiliert nicht. Ich hatte eine funktionierende, die nur Kleinbuchstaben zuließ:

pattern: /^[a-z]+$/ 

Aber ich muss die Anzahl der Zeichen auf 10 beschränken.

Peter Mortensen
quelle
4
Das {} und das + machen dasselbe (Zählen), daher sind sie redundant, daher der Fehler.
PhiLho
1
Sie sollten das '+' von / ^ [az] {0,10} + $ / löschen. Es sollte / ^ [az] {0,10} $ /
SO User
1
Beachten Sie, dass Muster ^[a-z]{0,10}+$in einigen Sprachen kompiliert werden und einige der bemerkenswerten Java, Perl (5.10+), PHP, Ruby (1.9+) sind. Weitere Informationen finden Sie auf dieser Seite .
Jerry
Siehe auch universelle Lösung über Lookahead: Beschränken der Zeichenlänge im regulären Ausdruck
Vadzim

Antworten:

353

Sie können geschweifte Klammern verwenden, um die Anzahl der Vorkommen zu steuern. Dies bedeutet beispielsweise 0 bis 10:

/^[a-z]{0,10}$/

Die Optionen sind:

  • {3} Genau 3 Vorkommen;
  • {6,} Mindestens 6 Vorkommen;
  • {2,5} 2 bis 5 Vorkommen.

Siehe die Referenz für reguläre Ausdrücke .

Ihr Ausdruck hatte nach der schließenden geschweiften Klammer ein +, daher der Fehler.

Cletus
quelle
In Chrome-Entwicklungswerkzeugen mit Glut musste ich den Anfang weglassen ^, um NUR Anfragen mit einem Namen wie 1234oder abzugleichen 5678, und ich musste das $ -Zeichen einfügen
Devin G Rhode
11

/^[a-z]{0,10}$/sollte arbeiten. /^[a-z]{1,10}$/Wenn Sie mindestens einem Zeichen entsprechen möchten, wie dies der /^[a-z]+$/Fall ist.

Joren
quelle
9

Es kann nützlich sein, am Ende der Zeichenfolge eine gierige Übereinstimmung hinzuzufügen, sodass Sie Zeichenfolgen> als 10 akzeptieren können und der reguläre Ausdruck nur bis zu den ersten 10 Zeichen zurückgibt. /^[a-z0-9]{0,10}$?/

jfarrell
quelle
8

Es hängt sehr stark von dem Programm ab, das Sie verwenden. Verschiedene Programme ( Emacs , vi , sed und Perl ) verwenden leicht unterschiedliche reguläre Ausdrücke. In diesem Fall würde ich sagen, dass im ersten Muster das letzte "+" entfernt werden sollte.

Diego Sevilla
quelle
7
grep '^[0-9]\{1,16\}' | wc -l

Gibt die Anzahl mit exakter Übereinstimmung mit Limit an

user6911841
quelle