我正在尝试在 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
我需要验证这两个标准
Mercosul 的正则表达式验证似乎不正确。需要括号吗?
正确的正则表达式(没有“-”字符)应该是这样的:
^[a-zA-Z]{3}[0-9][A-Za-z0-9][0-9]{2}$
您可以使用在线工具来测试您的正则表达式,甚至 chatGPT 也能够为您测试和生成它们。
希望这有帮助!