【问题标题】:Only accept 11 digits in a IntegerField (not less than 11, and not more than 11)仅接受 IntegerField 中的 11 位数字(不少于 11,不超过 11)
【发布时间】:2014-03-24 12:27:36
【问题描述】:

我有一个 IntegerField,我希望输入只接受 11 位数字/数字的值。

我试图在该字段上制作一个正则表达式验证器,但我的问题是当我尝试使用该字段制作一个模型表单时。如果值是 10 位或更少,我只会收到验证错误,但如果我尝试 12 位及以上的值,我不会收到任何验证错误。

这是我的模型字段:

number =  models.IntegerField(max_length=11, validators=[RegexValidator(r'\d{11,11}','Number must be 11 digits','Invalid number')])

如果值超过 11 位,我怎样才能得到验证错误?

【问题讨论】:

  • 你只想要数字或字符到??/
  • M42 提供的用户正则表达式非常适合您
  • 在您的编辑中,您似乎错过了 M42 答案中的起始锚点,即第一个引号后的小 ^。使用您当前的正则表达式,即使 bladieblaanythinghere12345678901 也会被接受,因为它只是查看字符串是否包含 11 位数字,然后是字符串的结尾。使用起始锚点^,它将查找字符串的开头,然后是 11 位数字,然后是字符串的结尾 - 不允许在正则表达式的数字部分之前/之后的任何其他字符。
  • @knbk:你是对的!我错过了^。现在它起作用了!我删除了我的编辑,因为它没有为问题添加任何内容。

标签: python regex django django-models django-validation


【解决方案1】:

不确定 django 语法,但你必须使用锚点:

r'^\d{11}$'

【讨论】:

    【解决方案2】:

    考虑使用min_length kwarg - 它的工作原理与您想象的完全一样:

    class YourModel(models.Model):
        number = models.IntegerField(max_length=11, min_length=11,
            validators=[RegexValidator(r'\d{11,11}',
                'Number must be 11 digits', 'Invalid number')])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2021-05-21
      相关资源
      最近更新 更多