RegEx диапазон длины не работает в Django/Python? (re.error: multiple repeat at position)

Я пытаюсь добавить пользовательский валидатор с regex для a-z, A-Z, 0-9, _ и от 3 до 20 символов.

class Validator(validators.RegexValidator):
    regex = r"^[A-Za-z0-9_]{3,20}+\Z"
    flags = re.ASCII

RegEx работает нормально, когда нет диапазона символов, то есть r"^[A-Za-z0-9_]+\Z"

И я думаю, что {3,20} - это правильный способ указания длины... поэтому я не уверен, почему regex не работает.

Я получаю эту ошибку re.error: multiple repeat at position 19 независимо от строки, которую я пытаюсь проверить.

Полный отслеживание:

Это не имеет никакого отношения к Django. Сам шаблон является незаконным (по крайней мере, в Python).

{3,20} уже говорит "от 3 до 20 раз". Наличие + (что означает "один или более раз") сразу после него не имеет смысла.

Шаблон, который вы ищете - r"^[A-Za-z0-9_]{3,20}\Z".

EDIT: По-видимому, {3,20}+ is законно в некоторых регекс-движках (не в Python'е), но тогда + означает что-то другое (т.е. not "один или более раз из последнего совпадения"). См. http://www.rexegg.com/regex-quantifiers.html#possessive (Спасибо @The fourth bird за ссылку)

Вернуться на верх