3 votes

RegexValidator n'autorise pas les 0-9 dans CharField

Je veux permettre uniquement caractères 0-9 pour tous les caractères saisis dans un fichier Django CharField .

Quand j'utilise RegexValidator() con regex = r'[^0-9]' . Je peux tout saisir mais 0-9 dans le champ. En fait, cela me permettra d'entrer une chaîne de caractères telle que "word" , "a4523" , "!#$%#^%" y "5432bc" mais pas "4523" .

Si j'enlève le ^ et mettre regex = r'[0-9]' (voir le code ci-dessous) alors je peut entrez "4523" , "5432bc" y "a4523" mais pas "word" o "!#$%#^%" .

Retirer le ^ semble me mettre dans la bonne direction, mais pas complètement. Je ne veux pas utiliser un PositiveSmallIntegerField parce que je veux traiter l'entrée numérique comme une chaîne de caractères.

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),
        ],
    )

7voto

Jamey Sharp Points 4794

L'expression régulière [^0-9] permet de faire correspondre un non-digit n'importe où dans la chaîne. Vous avez probablement voulu commencer par ^[0-9] ce qui nécessite un chiffre au début de la chaîne. Pour une solution complète, je pense que vous voulez ^[0-9]*$ qui exige que tous les caractères de la chaîne soient des chiffres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X