2014-04-22 128 views
0

我有了这个模型类:匹配逗号正则表达式的作品,但否定不

class ItemTag(models.Model): 

    name_regex = re.compile(r'[^,]') 
    name = models.CharField('Tag Name', max_length = 20, unique = True, 
          validators=[RegexValidator(regex=name_regex)]) 
    class Meta: 
    ordering = ['name'] 

我需要使用验证拒绝与他们逗号的字符串。我期望re.compile(r'[^,]')来做到这一点,但事实并非如此。

当我将其更改为re.compile(r'[,]')时,它需要逗号,这正是我所期望的,但字符类的否定似乎不像预期的那样正常工作,在文档中找不到任何解释。

我使用这些应用程序:

的Python 2.6.5 Django的1.4.5

回答

3

[^,]表示“一个字符,除,之外的任何字符”。

所以你的正则表达式检查至少有一个非逗号字符。

您可以用这个代替,以保证非逗号字符是在你的字符串:

^[^,]+$ 

^$是锚分别匹配字符串的开头和结尾。

+0

这是完美的。我应该知道使用+,但我不认为我会考虑用^ $ 装箱它谢谢! – GForce

0

您应该使用正则表达式如下:

name_regex = re.compile(r'^[^,]*$') 

此检查整个字符串保证没有一个字符是,

0

使用负前瞻(?!.*[,])

class ItemTag(models.Model): 

    name_regex = re.compile("^(?!.*[,]).*$") 
    name = models.CharField('Tag Name', max_length = 20, unique = True, 
          validators=[RegexValidator(regex=name_regex)]) 
    class Meta: 
    ordering = ['name'] 
+0

为什么要上角色课?我也不认为OP知道未来会有什么负面看法,也不知道该模式的名称。 – Robin

相关问题