Não sei se o tópico esta na categoria certa, qualquer coisa pode mudar.
É o seguinte quero validar um dominio de acordo com a seguinte regra:
Tamanho mínimo de 2 e máximo de 26 caracteres, não incluindo a categoria, por exemplo: no domínio XXXX.COM.BR, esta limitação se refere ao XXXX.
Caracteres válidos são [A-Z;0-9], o hífen e os seguintes caracteres acentuados : à, á, â, ã, é, ê, í, ó, ô, õ, ú, ü, ç.[1]
Não pode conter somente números.
Estou utilizando a expressão ([a-zàáâãéêíóôõúüç]+[0-9]*){2,26}.
Pois um dominio não pode ter somente números no nome, então tem que ter uma letra obrigatoriamente, e deve ter no minimo 2 e no máximo 26 caracteres.
É seguinte, ele valida o tamanho de 2 a 26 esta ok.
Quando informado somente números ele da como falso, então esta certo essa parte.
Quando informado somente letras ele da como verdadeiro, então esta certo essa parte.
Quando informado uma letra e varios números ele da como falso, isso esta errado, era para dar verdadeiro.
Acho que como os números são opcionais ele valida o tamanho {2,26} com base somente nas letras que pelo menos uma é obrigatória.
Um domínio pode até começar por número, mas não pode ser feito só de números. Não achei uma expressão regular adequada (embora eu tenha tentado usar "(?!) " - negative lookahead).
[quote=thingol]Um domínio pode até começar por número, mas não pode ser feito só de números. Não achei uma expressão regular adequada (embora eu tenha tentado usar "(?!) " - negative lookahead).
[code]
import java.util.regex.*;
class ExpressaoRegular {
public static void main(String[] args) {
Pattern pat = Pattern.compile ("[a-zàáâãéêíóôõúüç0-9]{2,26}", Pattern.CASE_INSENSITIVE);
Pattern pat2 = Pattern.compile ("[0-9]+");
String[] testes = {
“a”,
“aa”,
“a0”,
“00”,
“abczàáâãéêíóôõúüç0”,
“012345678901234567890123x”,
“0123456789012345678901234”,
};
for (String t : testes) {
System.out.println (t + “->” + (pat.matcher (t).matches() &&
Amigo eu não queria usar dois patterns, queria validar tudo de uma vez só, pois estou validando um email.
segue abaixo o meu exemplo.
private static final Pattern PADRAO = Pattern.compile("[\w\.-]+@([a-zàáâãéêíóôõúüç-]+[0-9]*){2,26}\.[\w\.]+", Pattern.CASE_INSENSITIVE);
@Override
public Boolean validar(String objetoAserValidado) {
//Verifica se o objeto não é nulo e se o tamanho dele é o mínimo.
if(objetoAserValidado == null || objetoAserValidado.trim().length() < 5)
return false;
//Retorna o resultado da validação de acordo com o PADRAO.
return PADRAO.matcher(objetoAserValidado).matches();
}
Daria pra validar usando [\w\.-]+@[a-zàáâãéêíóôõúüç0-9]{2,26}\.[\w\.]+ no primeiro pattern e .+@[a-z]+.+ no segundo, usando ignore case nos dois patterns, usando comparador &&.
Queria fazer tudo em um pattern só.