Регулярное выражение Python для буквенно-цифровых символов не работает - PullRequest
0 голосов
/ 09 июня 2009
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 голос
/ 09 июня 2009

Это как бы показывает подсветку синтаксиса. Апостроф в регулярном выражении не избежал, это должно быть так:

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)

Позаботьтесь о том, чтобы указанное выше регулярное выражение также оставляло пробелы в начале и конце поля. Чтобы избежать этого, вам нужно более сложное регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...