Utilizamos cookies para que você tenha a melhor experiência em nosso site. Para saber mais acesse nossa página de
Política de Privacidade
document.addEventListener('DOMContentLoaded', function() {
// 1. Seleciona o campo pelo ID fornecido no seu HTML
const inputReserva = document.getElementById('field_numero-da-reserva-no-resort');
// 2. Define a Regra da Regex
const regexReserva = /^RES\d{6}-\d{4}$/i;
if (inputReserva) {
// ==========================================
// AÇÃO 1: MÁSCARA EM TEMPO REAL (UX)
// ==========================================
inputReserva.addEventListener('input', function(e) {
// Força tudo para maiúsculo imediatamente
let valor = e.target.value.toUpperCase();
// Se o usuário tentar apagar o "RES", mantemos o padrão
// Permite digitar apenas os números e o código formata sozinho
if (valor.length > 0 && !valor.startsWith('RES')) {
let apenasNumeros = valor.replace(/\D/g, '');
if (apenasNumeros.length > 0) {
valor = 'RES' + apenasNumeros;
}
}
// Adiciona o hífen automaticamente após os 6 números
// Captura o padrão RES + 6 números ($1) e o número seguinte ($2)
valor = valor.replace(/^(RES\d{6})(\d)/, '$1-$2');
// Limita o tamanho máximo do campo para 15 caracteres (RES + 6 num + hífen + 4 num)
e.target.value = valor.substring(0, 15);
});
// ==========================================
// AÇÃO 2: VALIDAÇÃO FINAL AO SAIR DO CAMPO
// ==========================================
inputReserva.addEventListener('blur', function(e) {
const valorFinal = e.target.value.trim();
// Só valida se o campo não estiver vazio (o "required" do HTML já cuida do vazio)
if (valorFinal !== '') {
if (!regexReserva.test(valorFinal)) {
// Feedback de Erro
e.target.style.borderColor = '#dc3545'; // Borda vermelha
e.target.style.boxShadow = '0 0 0 0.2rem rgba(220,53,69,.25)';
// Alerta nativo (pode ser substituído por uma mensagem na interface da sua página)
alert('⚠️ O formato da reserva está inválido. Por favor, utilize o padrão: RESXXXXXX-XXXX (Ex: RES273569-9098)');
// Opcional: Limpa o campo para forçar redigitação
// e.target.value = '';
} else {
// Feedback de Sucesso
e.target.style.borderColor = '#28a745'; // Borda verde
e.target.style.boxShadow = 'none';
}
}
});
}
});