2011-07-15 3 views
5

J'essaie de valider un champ de saisie avec regex avec ce modèle [A-Za-z]{,10} Je veux qu'il trouve seulement une correspondance si 10 caractères ou moins ont été envoyés dans le champ de saisie, le problème que je reçois est qu'il correspondra à tous les mots qui comptent moins de 10 caractères.Utilisation de regex pour filtrer les chaînes par longueur

Existe-t-il un moyen de dire s'il y a plus de 10 caractères dans le champ de saisie qui sont faux, ou est-il préférable de faire un strlen avec php?

+0

Notez que: '{, 10}' est un quantificateur invalide. Bien que: '{10,}' signifie que "_" corresponde 10 fois ou plus "_, l'expression:' {, 10} 'ne signifie PAS _" correspondre de zéro à dix fois "_. Cela signifie en fait: _" une accolade gauche, une virgule, le chiffre 1, le chiffre 0 et une accolade droite "_. Pour obtenir le comportement que vous voulez, vous devez spécifier le premier chiffre comme suit:' {0,10} '. – ridgerunner

Répondre

1

Une erreur de syntaxe importante est commise ici par l'OP et toutes les réponses regex actuelles: Lorsque vous utilisez le quantificateur d'accolades avec PHP (PCRE), vous devez spécifier le premier nombre. (À savoir l'expression: {,10} est pas un quantificateur valide!) Bien que la virgule et le deuxième numéro sont facultatifs, le premier numéro un quantificateur accolade est nécessaire. Ainsi, l'expression doit être spécifiée comme suit:

if (preg_match('/^[A-Za-z]{0,10}$/', $text)) 
    // Valid input 
else 
    // Invalid input 
3

Si vous devez valider que c'est seulement alphabétique, ne pas utiliser strlen(). Au lieu de cela, mettre des limites (^$) sur votre regex:

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

Si vous correspondez juste ^[A-Za-z]{,10}$ il vérifiera que la chaîne entière est de 10 ou moins.

0

^[A-Za-z]{,10}$

[email protected]#$^&$a36#&$^ PASSERA votre regexp car a est sous-chaîne de et a passe [A-Za-z]{,10}

0

Si vous ne souhaitez que la longueur de la chaîne, regex est lourde et vous devez utiliser strlen au lieu.

Questions connexes