2009-06-09 5 views
-1
from django import forms 
class ActonForm(forms.Form): 
    creator = forms.RegexField('^[a-zA-Z0-9\-' ]$',max_length=30, min_length=3) 

data = {'creator': 'hello' 
     } 
f = ActonForm(data) 
print f.is_valid() 

Pourquoi cela ne fonctionne-t-il pas? ai-je fait une mauvaise expression régulière? Je voulais un champ de nom avec une disposition pour les guillemets simples et un trait d'unionLa regex Python pour alphanumériques ne fonctionne pas

+1

-1: C'est le pire titre de la question. Est-ce une question "l'expression régulière ne fonctionne pas"? –

Répondre

1

Cela se montre un peu dans la coloration syntaxique. L'apostrophe dans le regex n'est pas échappé, il devrait ressembler à ceci:

forms.RegexField('^[a-zA-Z0-9\\-\' ]$',max_length=30, min_length=3) 

Edit: Lorsque vous échappez les choses dans l'expression régulière, vous avez besoin backslashes double. J'ai doublé le backslash avant le trait d'union (pas qu'il doit être échappé dans ce cas particulier.)

Deuxièmement, votre expression régulière ne permet qu'un seul caractère. Vous devez utiliser un quantificateur. + signifie un ou plusieurs, * signifie 0 ou plus, {2,} signifie deux ou plus, {3,6} signifie trois à six. Vous voulez sans doute ceci:

forms.RegexField('^[a-zA-Z0-9\\-\' ]+$',max_length=30, min_length=3) 

prennent soin que l'expression régulière ci-dessus permettra des espaces en début et en fin du champ ainsi. Pour éviter cela, vous avez besoin d'une regex plus complexe.

+0

Le tiret est également au mauvais endroit - les traits d'union dans les classes de caractères ne sont pas des barres obliques inversées, mais devraient plutôt être le premier ou le dernier caractère. –

+0

Les traits d'union peuvent être échappés comme n'importe quel caractère spécial. Cependant, les placer en premier ou en dernier dans une classe de personnage peut être considéré comme une bonne pratique car il améliore légèrement la lisibilité. – Blixt

Questions connexes