Python正则表达式无法匹配字母数字

-1 投票
1 回答
906 浏览
提问于 2025-04-15 12:07
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 个回答

1

这个内容在语法高亮上有点体现出来。正则表达式中的撇号没有被转义,应该像这样:

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

编辑:在正则表达式中转义的时候,你需要用两个反斜杠。我在连字符前面加了一个反斜杠(虽然在这个特定情况下其实不需要转义)。

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

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

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

撰写回答