2009-12-16 6 views
3

J'essaie de créer une expression de validation qui vérifie la longueur d'une entrée et permet le texte et les signes de ponctuation (par exemple,?;:! "£ $%)Regex pour autoriser le texte, certains caractères spéciaux et rester en dessous d'une longueur spécifiée

ce que je suis venu avec à ce jour est "^\s*(\w\s*){1,2046}\s*$" mais cela ne permet aucune signes de ponctuation. Pour être honnête, je suis assez peu précis dans ce domaine de sorte que toute aide serait grandement appréciée!

Merci,

Steve

Répondre

7
^[\w\s.,:;!?€¥£¢$-]{0,2048}$ 

^ - Début de chaîne/ligne
[] - Une classe de caractère
\w - Un mot caractère
\s - Un espace
.,:;!?€¥£¢$- - Ponctuation et caractères spéciaux
{} - Nombre de répétitions (min, max)
- Fin de la chaîne/ligne

+0

Merci, cet article est très utile et l'explique bien. –

+0

Notez que vous devrez peut-être l'ajuster aux règles d'échappement de votre système. – Svante

+0

Notez également que vérifier la longueur de la chaîne avant de vérifier chaque caractère serait plus efficace, mais autant que je me souvienne, la validation dans ASP.NET est faite par une fonction qui attend une seule regex comme paramètre (que je considère comme mauvaise conception). – Svante

1

Cela devrait le faire:

^\s*([\w,\?;:!"£$%]\s*){1,2046}$ 

Notez que cela ne limite pas la longueur de l'entrée du tout, il ne fait que limiter le nombre de caractères non-espace blanc.

Pour limiter la longueur, vous pouvez utiliser un test avant positif qui correspond uniquement à une plage de longueur spécifique:

^(?=.{1,2046}$)\s*([\w,\?;:!"£$%]\s*)+$ 

(La limite supérieure du nombre de caractères non-espace blanc est inutile si elle est la même . la longueur la + est courte pour {1,}, ce qui nécessite au moins un caractère non-white-space)

+0

Ok merci, je ne le savais pas. Comment puis-je limiter la longueur de l'entrée entière? –

+0

@Steve: Voir ma modification ci-dessus. – Guffa

0

Cette expression régulière doit correspondre à tous vos personnages et de limiter l'entrée.

^\s*([\w\s\?\;\:\!\"£\$%]{1,2046})\s*$ 
+0

Non, il autorise des espaces infinis d'espaces au début et à la fin de la chaîne. – Svante

1

Si vous souhaitez autoriser le texte et la ponctuation, que souhaitez-vous exclure? Chiffres? \ D vous donnera tout ce qui n'est pas un chiffre

+0

C'est un bon point. J'ai aussi besoin de chiffres. Je suppose que je dois juste m'assurer qu'il n'y a pas de code malveillant. –

+0

Haha, vite! essayer de définir un code malveillant! Peut-être que vous êtes mieux de définir un certain type de code ... si c'est pour le HTML, il suffit d'interdire moins de signes. Ce genre de chose. – Karl

+0

Karl, la définition d'une liste blanche est généralement plus sûre qu'une liste noire.Si vous oubliez quelque chose dans une liste blanche, vos utilisateurs se plaignent de ne pas être en mesure d'entrer des données sensibles, ce qui est rapidement corrigé. Si vous oubliez quelque chose dans une liste noire, vos utilisateurs se plaignent que votre site soit "pwned", ce qui n'est pas si rapide à corriger. – Svante

1

Vous le savez peut-être déjà, mais: la protection contre les intrusions malveillantes doit être gérée côté serveur, pas dans la validation de formulaire côté client. Les chapeaux noirs ne vous empêcheront pas de contourner votre script.

Je pense qu'avec les frameworks frontaux Web les plus populaires, il existe un code de bibliothèque pour l'entrée de nettoyage. Une regex courte seule est assez fragile pour se prémunir contre une attaque par injection SQL.

Questions connexes