Verifiera fält med åäö

I django, liksom i nästan alla sammanhang, blir det förr eller senare problem med svenska tecken som å, ä och ö.

Ofta vill man verifiera att texten i ett fält i en modell är giltigt. Det kan vara t.ex. att fältet innehåller ett telefonnummer, endast siffror eller ett maxvärde. Om man vill att ett fält endast får innehålla bokstäver får man problem. Som standard i Python anses nämligen inte å, ä eller ö vara en bokstav.

Ett enkelt trick att verifiera fält i Django är med RegexValidator. Här kan man kasta in ett regexp som sköter kontrollen. Knepet är bara att använda sig av ASCII-koden för åäö.

I exemplet nedan används RegexValidator för att kontrollera att fältet name i modellen User endast innehåller bokstäver (inklusive åäöÅÄÖ), siffror, mellanslag eller bindestreck. Försöker man skriva en en sträng innehållande något annat tecken får man ett fel.

from django.core.validators import RegexValidator

class User(models.Model):
    name = models.CharField(max_length=64, unique = True, help_text = "Name of user", validators=[RegexValidator(regex="^[a-z0-9A-Z- xc5xC4xD6xE5xE4xF6]*$", message="Invalid character")])
    email = models.EmailField(null=True, blank=True, help_text = "E-mail address")
}

Om man nu hoppar in i admin-gränssnittet och försöker skapa en User med ett namn med t.ex. ett ? så kommer ”Invalid charachter” dyka upp med rött.