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

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 "";	
        }
    }	
}

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

isso dai não preve os espaços…

Oi!

Porque não somente isso:

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

}[/code]

Abraços.

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:

[code]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);
}  

}[/code]

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

[code]
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;
 }

} [/code]

Resultado: Estados Unidos

[quote=maior_abandonado]isso dai não preve os espaços…
[/quote]

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; }

Em menos linhas e sem regex…

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

[quote=lucasportela]Em menos linhas e sem regex…

private boolean primeiraLetraMaiuscula(String palavra) { if(Character.isUpperCase(palavra.codePointAt(0)))return true; return false; } [/quote]
:slight_smile: Nice!.. Sem regex é divertido… Mas a duvida do “Edu Valente” é como validar nome via regex!..

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.

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.

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

public int codePointAt(int index)