Validando strings utilizando regexp!

Pessoal,

Estou tentando validar uma string para receber somente numeros e uma outra para receber somente caracteres alfabeticos…

A principio, estava tentando o comando Pattern.matches("[^a-zA-Z]", nome).

Tentei para somente receber numeros mas tb n obtive sucesso…

Pattern.matches("[^0-9]+", tel).

Alguem pode me ajudar?

[]'s
Beto.

Se vc agrupar funciona:

Pattern.matches("([^0-9])+", tel).

Note que o telefone somente podera conter numeros. Qualquer hifen ou espaco ira invalidar a expressao.

Rafael

E há alguma solucao para validar uma string q recebe um nome usando regexp? Como já conversamos, o nome poderá vir acentos…

Simplesmente verifique se o nome nao eh nulo ou vazio. Nao me parece haver motivos plausiveis para validar “nome” utilizando expressoes regulares. Voce tera mais dor de cabeca e problemas do que vantagens.

Rafael

Se você usar uma expressão regular como “[\p{L}\p{Space}]+”, por exemplo, você até consegue validar os casos em que o nome está em chinês, tipo 魏婀坦 (gerei este nome no site
http://www.mandarintools.com/chinesename.html ), mas não consegue validar os casos em que o nome tem apóstrofos, pontos, vírgulas etc.
Então você tenta incluir pontuação: “[\p{L}\p{Space}\p{Punct}]+”
mas então você acaba percebendo que na verdade isso não valida absolutamente nada, já que deixa passar qualquer coisa. É melhor fazer como o Rafael lhe sugeriu.

Uma dúvida, como eu faria para pegar apenas uma certa quantidade? por ex, pegar apenas 2 digitos hexadecimais?

[0-9A-Fa-f]{2} se não me engano.
Você também pode usar
(\p{XDigit}){2} mas não acho muito claro, prefiro mostrar explicitamente que é um dígito hexadecimal, em vez de forçar a pessoa que está lendo o código a procurar no Javadoc a definição de XDigit.

Dica: use o programa RegEx Coach ( http://www.weitz.de/regex-coach/ ) para testar suas RegExps. Vale a pena…