2009-10-30 4 views
111

J'essaye d'écrire un regular expression qui ne permettra que des lettres minuscules et jusqu'à 10 caractères. Ce que j'ai pour l'instant ressemble à ceci:Expression régulière pour limiter le nombre de caractères à 10

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

Cela ne fonctionne pas ou ne compile pas. J'ai eu un travail qui serait tout simplement permettre des lettres minuscules qui était ceci:

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

Mais je dois limiter le nombre de caractères à 10.

+4

Le {} et + faire la même chose (comptage), ils sont donc redondants, d'où l'erreur. – PhiLho

+1

Vous devez supprimer le '+' de/^ [a-z] {0,10} + $ /. Il devrait être/^ [az] {0,10} $/ –

+1

Notez que le modèle '^ [az] {0,10} + $' compile sur certaines langues et certaines des plus notables sont Java, Perl (5.10+) , PHP, Ruby (1.9+). Voir [cette page] (http://www.regular-expressions.info/possessive.html) pour plus de détails. – Jerry

Répondre

247

Vous pouvez utiliser des accolades pour contrôler le nombre d'occurrences. Par exemple, cela signifie 0 à 10:

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

Les options sont:

  • {3} Exactement 3 occurrences;
  • {6,} Au moins 6 occurrences;
  • {2,5} 2 à 5 occurrences.

Voir le regular expression reference.

Votre expression avait un + après l'accolade fermante, d'où l'erreur.

5

Cela dépend beaucoup du programme que vous utilisez. Différents programmes (Emacs, vi, sed et Perl) utilisent des expressions régulières légèrement différentes. Dans ce cas, je dirais que dans le premier modèle, le dernier "+" devrait être supprimé.

8

/^[a-z]{0,10}$/ devrait fonctionner. /^[a-z]{1,10}$/ si vous voulez faire correspondre au moins un caractère, comme /^[a-z]+$/ fait.

7

Il peut être avantageux d'ajouter une correspondance gourmande à la fin de la chaîne, de sorte que vous pouvez accepter des chaînes> 10 et que l'expression régulière ne renvoie que les 10 premiers caractères. /^[a-z0-9]{0,10}$?/

2
grep '^[0-9]\{1,16\}' | wc -l 

Donne les comptes avec correspondance exacte avec limite comptent

Questions connexes