Regex: o usuário deve inserir a primeira letra maiúscula

12 respostas
Edu_Valente

Boa tarde. Eu criei uma regex que deve coincidir com um nome com a primeira letra maiúscula e achei que a tinha escrito corretamente. Vocês poderiam me dizer qual regex eu poderia escrever para o padrão “Nome com a primeira letra maiúscula”? obrigado.

public class Validator
{
    public static String validateName(String name)
    {
        String reg1 = "^([A-Z]{1})([a-z]{1,})$";
        if(name.matches(reg1))
        {
          return name;	
        }
        else {
         return "";	
        }
    }	
}

12 Respostas

HelberChoo

Interessante!.. Podes fazer o seguinte:

String reg1 = "[A-Z][a-z]+"; //Caso todos nomes devem iniciar com uma Letra Maiúscula e terminarem com uma ou mais letras minúsculas
maior_abandonado

isso dai não preve os espaços…

nel

Oi!

Porque não somente isso:

public static void main(String[] args)   {
		String name = "João Carlos";
		char c = name.charAt(0);
		boolean lowerCase = Character.isUpperCase(c);
		System.out.println(lowerCase);
		
		
	}

Abraços.

nel

Oi!

Só uma pergunta, tendo em vista que o seu método só tem o intuito de identificar se o nome é válido ou não sem que haja alterações, porque não retornar um booleano ao invés de uma String vazia? Simples assim:

public class Validator   
{   
    public static boolean validateName(String name) {   
        if(null == name || name.trim().isEmpty)
             return false;
        
       char c = name.charAt(0);
       return Character.isUpperCase(c);
    }  
}
T

Se precisar todos inícios de palavra pode usar da seguinte forma:

import org.apache.commons.lang.WordUtils;

public class t {
	
	public static void main(String[] args) {
		
		 System.out.println(mudaPrimLetra("estados unidos"));
	}

    public static String mudaPrimLetra(String palavra) {
	palavra = palavra.toLowerCase();
	palavra = WordUtils.capitalize(palavra);
	return palavra;
     }
}

Resultado: Estados Unidos

HelberChoo

maior_abandonado:
isso dai não preve os espaços…

Interessante, havia projetado para funcionar com o primeiro nome!.. Cá esta regex que funciona :smiley:

public boolean nomeValido(String nome){ String regex = "[A-Z][a-z]+[[ ][A-Z][a-z]+]*"; if(nome.matches(regex)) return true; return false; }

lucasportela

Em menos linhas e sem regex…

private boolean primeiraLetraMaiuscula(String palavra) {
    	if(Character.isUpperCase(palavra.codePointAt(0)))return true;
    	return false;
    }
HelberChoo

lucasportela:
Em menos linhas e sem regex…

private boolean primeiraLetraMaiuscula(String palavra) { if(Character.isUpperCase(palavra.codePointAt(0)))return true; return false; }


:slight_smile: Nice!.. Sem regex é divertido… Mas a duvida do “Edu Valente” é como validar nome via regex!..

maior_abandonado

um monte de gente está somente verificando se o primeiro caracter é maiusculo, não sei se isso deve ser feito mas pelo que eu intendi não deveriam ter caracteres especiais no resto da string por exemplo… o que esse método não analisaria.

E

Uma vantagem do Character.isUpperCase é que ele funciona também para o caso em que há letras acentuadas.

static byte 	UPPERCASE_LETTER
          General category "Lu" in the Unicode specification.

Note que eu usei “\p{Lu}” na expressão regular, o que indica que Character.isUpperCase é o exato equivalente da minha expressão regular.

HelberChoo

O método que postei é valido, pois ele aceita qualquer nome que seja valido, testei o pessoalmente.

lucasportela

public int codePointAt(int index)

Criado 9 de agosto de 2011
Ultima resposta 12 de ago. de 2011
Respostas 12
Participantes 7