在 Django 中验证旧标准巴西和南方共同市场车辆牌照

问题描述 投票:0回答:1

我正在尝试在 Django (Python) 中验证旧的 ABC2546 标准和 Mercosul ABC1A35 标准的巴西板。但当我在无效的铭牌上输入南方共同市场标准时。

def validate_placa(placa):
    """
    Valida se a placa do veículo está no formato correto.

    Args:
        placa (str): A placa do veículo a ser validada.

    Returns:
        None se a placa for válida, uma mensagem de erro se não for.
    """
    placa_regex = r'^[A-Z]{3}-[0-9]{4}$|^([0-9]{3})-([0-9]{3})([A-Z]{1})$'
    # Formato: ABC-1234
    validator = RegexValidator(regex=placa_regex, message='Placa inválida.')
    try:
        validator(placa)
    except ValidationError as error:
        return error.message
class ClienteForm(forms.ModelForm):
    class Meta:
        model = Cliente
        fields = '__all__'

    veiculo_placa = forms.CharField(
        validators=[validate_placa],
        max_length=8,
        error_messages={'required': 'Placa é obrigatória.'}
    )

    def validate_data(self, data):
        cleaned_data = super().validate_data(data)
        veiculo_placas = self.data.getlist('veiculo_placa')

        for placa in veiculo_placas:
            error_message = validate_placa(placa)
            if error_message:
                self.add_error('veiculo_placa', error_message)

        return cleaned_data
    

我需要验证这两个标准

python django
1个回答
0
投票

Mercosul 的正则表达式验证似乎不正确。需要括号吗?

正确的正则表达式(没有“-”字符)应该是这样的:

^[a-zA-Z]{3}[0-9][A-Za-z0-9][0-9]{2}$

您可以使用在线工具来测试您的正则表达式,甚至 chatGPT 也能够为您测试和生成它们。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.