我有这个模特课:
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
答案 0 :(得分:3)
[^,]
表示“一个字符,除,
以外的任何字符”。
所以你的正则表达式检查至少有一个非逗号字符。
您可以使用此功能来确保仅非逗号字符位于您的字符串中:
^[^,]+$
^$
是分别匹配字符串开头和结尾的锚点。
答案 1 :(得分:0)
您应该使用以下正则表达式:
name_regex = re.compile(r'^[^,]*$')
检查整个字符串以确保所有字符都不是,
答案 2 :(得分: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']