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

왜 작동하지 않습니까? 내가 규칙적인 표현을 잘못 했니? 작은 따옴표와 하이픈을 포함하는 이름 필드가 필요했습니다.영숫자 용 Python 정규 표현식이 작동하지 않습니다.

+1

-1 : 최악의 질문 제목입니다. 이것은 "정규식이 작동하지 않는"질문입니까? –

답변

1

구문 강조 표시의 종류입니다. 정규식에 아포스트로피는 같이해야 이스케이프되지 않습니다

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

편집 : 정규 표현식에서 일을 탈출 할 때, 당신은 이중 백 슬래시가 필요합니다. 하이픈 앞에 백 슬래시를 두 배로 추가했습니다.이 특별한 경우에는 이스케이프해야합니다.

두 번째로, 정규 표현식은 한 문자 만 허용합니다. 한정 기호를 사용해야합니다. +는 하나 이상의 의미, *는 0 이상의 의미, {2,}는 둘 이상의 의미, {3,6}은 3 - 6을 의미합니다.

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

위 정규 표현식뿐만 아니라 필드의 시작과 끝의 공백을 허용 알아서 말라 : 당신은 아마이 원하는. 이를 방지하기 위해서는보다 복잡한 정규 표현식이 필요합니다.

+0

하이픈 또한 잘못된 위치에 있습니다. 문자 클래스의 하이픈은 백 슬래시가 이스케이프 처리되지 않고 대신 첫 번째 또는 마지막 문자 여야합니다. –

+0

하이픈은 다른 특수 의미 문자와 마찬가지로 이스케이프 할 수 있습니다. 그러나 문자 클래스에서 처음 또는 마지막으로 배치하는 것은 가독성을 향상시키기 때문에 우수 사례로 간주 될 수 있습니다. – Blixt

관련 문제