Estou com um pequeno problema para resolver, preciso fazer uma pequena validação de nome de Usuário, onde somente se pode aceitar caracteres Alfanuméricos (Aa~Zz/0~9), pontos (.), traços (-) e arroba (@) tratando corretamente caso seja inserido um caractere inválido, além de validar com o Banco de Dados para verificar se já existe. A validação com o banco eu consigo fazer tranquilamente, porém a filtragem de caracteres eu não estou conseguindo fazer, uso o seguinte método:
private void txtUsuarioKeyTyped(java.awt.event.KeyEvent evt) {
String caracteres = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0987654321.-@";
if (!caracteres.contains(evt.getKeyChar() + "")) {
/*evt.consume();*/
lblVerifUsuario.setIcon(new ImageIcon(getClass().getResource("/br/com/octur/imagens/Icon_erro.png"))); //caso haja caractere inválido exibe esta imagem em um label
} else {
lblVerifUsuario.setIcon(new ImageIcon(getClass().getResource("/br/com/octur/imagens/Icon_ok.png")));
}
}
Acontece que quando eu digito mais de 2 caracteres ele exibe a imagem como se estivesse errado, mesmo digitando caracteres na lista dos permitidos. Queria uma luz no meio de toda essa escuridão, se alguém puder ajudar ficaria agradecido.
Prezado creio que um bom caminho para solução seria por expressões regulares (regex), pesquisa no google o aqui mesmo no guj que tem muito material sobre assunto, segue trecho de codigo para valida email, retirdo do link http://www.guj.com.br/t/validar-email-do-usuario/138604
Safeguard é uma biblioteca que tem varias validações pré definas, e caso não tenha você pode criar a sua, ela é integrada com validações de persistência.
Exemplo de uso dela:
Check check = new SafeguardCheck();
String email_para_validar = "teste@teste.com";
boolean result = check
.elementOf(email_para_validar, ParametroTipo.EMAIL)
.validate()
.hasError();
System.out.println(result);
Você pode usar o maven caso seja um projeto maven, ou baixar os jars idependentes:
Para criar o seu próprio tipo de validação, você cria dois enuns, um vai implementar a Interface BasePattern e o outro BaseParam, no seu caso se não é um email que você quer validar seria algo como no exemplo abaixo:
Obrigado, consegui fazer o método para validar o usuário usando as regex.
Eu estava procurando algo mais independente de bibliotecas externas, pois estou treinando para uma competição onde não conseguirei obtê-la. Mas seu código foi bastante útil e ajudou a achar a resposta, porem vou marcar a resposta do @Bituba como resolução pois foi com ela que eu achei o caminho para resolver. Muito Obrigado!