【问题标题】:Referencing search groups in Django's RegexValidator在 Django 的 RegexValidator 中引用搜索组
【发布时间】:2019-01-08 20:03:38
【问题描述】:

我有一个具有命名搜索组的正则表达式验证器。像这样的:

from django.core.validators import RegexValidator
my_validator = RegexValidator(r'^[a-zA-Z0-9]*/(?P<pk>[0-9]*)$')

现在,我用它来检查模式。像这样的:

search = my_validator('articles/421')
search.group('pk')

最后一行返回错误:

AttributeError: 'NoneType' object has no attribute 'group'

这是为什么? RegexValidator 是否不同于普通的正则表达式,因为它没有组?

【问题讨论】:

  • 使用r'^[a-zA-Z0-9]*/(?P&lt;pk&gt;[0-9]*)$' 以便在匹配时将一些文本捕获到pk 命名组中。
  • @WiktorStribiżew 已修复,但问题仍然存在。

标签: python regex django django-validation


【解决方案1】:

Django RegexValidator 是用于模型字段验证的可调用类。模型字段使用它来验证值。字段调用其验证器并检查是否没有引发 ValidationError

它有 regex 属性,这是一个普通的正则表达式,被惰性函数装饰器覆盖。如果您只需要正则表达式,只需使用标准 python 的 re.

您可以将 RegexValidator(或类似的类/可调用对象)列表传递给模型字段属性 validators,如下所示:

url_validator = RegexValidator(r'^[a-zA-Z0-9]*/(?P<pk>[0-9]*)$')
url = forms.CharField(validators=[url_validator])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 2018-07-22
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多