匹配逗号正则表达式有效,但否定n

2024-10-03 21:25:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个示范班:

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']

我需要使用验证器来拒绝带逗号的字符串。我预料到了重新编译(r'[^,]')这样做,但事实并非如此。在

当我把它换成重新编译(r'[,]')它需要逗号,这正是我所期望的,但是character类的否定似乎没有如预期的那样工作,而且我在文档中找不到任何解释。在

我使用这些应用程序:

Python 2.6.5 Django 1.4.5款


Tags: nameremodelmodelstaglengthmaxclass
3条回答

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

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

您可以使用此选项来确保字符串中只有非逗号字符:

^[^,]+$

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

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

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']

应使用以下正则表达式:

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

这将检查整个字符串以确保没有一个字符是,

相关问题 更多 >