用于字母数字的Python正则表达式无效

时间:2009-06-09 06:55:22

标签: python regex google-app-engine

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()

为什么这不起作用?我做了一个错误的正则表达式?我想要一个名称字段,其中包含单引号和连字符

1 个答案:

答案 0 :(得分:1)

它在语法高亮显示。正则表达式中的撇号不会被转义,它应该是这样的:

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

编辑:在正则表达式中转义内容时,需要双反斜杠。我在连字符之前加倍反斜杠(不是说在这种特殊情况下它必须被转义。)

其次,您的正则表达式仅允许单个字符。你需要使用量词。 +表示一个或多个,*表示0或更多,{2,}表示两个或更多,{3,6}表示三到六个。你可能想要这个:

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

请注意上面的正则表达式也会在字段的开头和结尾处允许空格。为了避免这种情况,你需要一个更复杂的正则表达式。