正则表达式验证器不允许CharField中包含0-9

3
我希望在Django的CharField中,只允许输入0-9的字符。当我使用RegexValidator()函数并设置regex=r'[^0-9]'时,该字段可以输入除0-9以外的任何字符。例如:"word""a4523""!#$%#^%""5432bc",但是"4523"不能输入。如果我删除^并将regex=r'[0-9]'(见下方代码),则可以输入"4523""5432bc""a4523",但是不能输入"word""!#$%#^%"。去掉^似乎是正确的方向,但还不够完美。因为我需要将数字输入视为字符串,所以不想使用PositiveSmallIntegerField
class Number(models.Model):
    number = models.CharField(
        max_length=14,
        validators=[
            RegexValidator(
                r'[0-9]',
                'Only 0-9 are allowed.',
                'Invalid Number'
            ),
            MinLengthValidator(4),
            MaxLengthValidator(14),
        ],
    )
1个回答

8

正则表达式[^0-9]的意思是匹配字符串中的非数字字符。你可能想要使用^[0-9],它要求字符串开头必须为数字。如果你想要完整的解决方案,我认为你需要使用^[0-9]*$,它要求字符串中所有字符都必须是数字。


1
允许为空吗?即 *(0 或多个)与 +(1 或多个)。另外:^\d+$ - Hamish
@Hamish,还有其他验证器被应用来限制输入的长度。OP显然希望输入介于4到14个字符之间。在这种情况下,没有必要将其编码到正则表达式中。简单性在这里似乎是很好的选择。 - Jamey Sharp
不允许为空。尽管在其中一个字段中,我只想允许数字字符串的开头出现'+',例如'+323'应该被允许,但是'+'不是必需的。 - nu everest
1
带有前导加号的正则表达式如下:r'^\+?[\d]*' - Matthias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接