Olá estou querendo implementar um método que valide se uma string começa com algum caracter especial (!#@$%¨&* e etc menos o _ ) ou se começa com algum número… acho que com expressões regulares eu conseguiria saber neh? mas como eu poderia fazer? obrigado!
anderson_lp789,
Aqui no guj tem um artigo de Expressões Regulares , segue o link abaixo espero ter ajudado :
http://www.guj.com.br/article.show.logic?id=1
sim já vi este tópico… mas como montar uma expressao regular colocando “se começar com caracter especial exceto _ está correto”? não consigo visualizar isso
Tente a seguinte regular expression:
String reg = "[^x].+";
onde “x” indica o caracter q voce deseja excluir
t+
entendi! eu montei isso daqui:
[code]
String teste = “_m*unome”;
//Pattern regex = Pattern.compile("[^x].+");
String[] resultado = teste.split("[^a-z1-9_A-Z].+");
for (int i =0, n = resultado.length; i < n; i++)
System.out.println(resultado[i]);[/code]
onde se o resultado nao tiver nada, quer dizer que tem caracter especial não permitido. Seria isso mesmo?!
Não é para usar split, e sim matches. Ele retorna true se bater, e false se não bater.
como assim? hmm eu tentei da seguinte mas não deu mito certo… ele está me retornando a string q vem depois por exmeplo:
[code]String teste = “_munome”;
Pattern regex = Pattern.compile("[^a-z_].+");
/* String[] resultado = teste.split("[^a-z_].+");
for (int i =0, n = resultado.length; i < n; i++)
System.out.println(resultado[i]); */
Matcher m = regex.matcher(teste);
if (m.find())
System.out.println(m.group());[/code]
nesse caso ele me retorna _munome
se eu mudar o valor da string teste para => “_m*unome”
ele me retorna => *unome
no que estou errando?
String s = "*_m*unome";
if (s.matches ("[!#@$%¨&*0-9].*")) {
System.out.println ("A string começa por um desses caracteres especiais, ou por número");
} else {
System.out.println ("Não bateu");
}
entendi, muito obrigado pelo exemplo. Mas qual é a diferença de eu usar o split e dessa forma que me passou?
Split serve para quebrar strings, não para validá-las (até pode ser usado para isso, mas deixa seu código difícil de entender).
Para cada uso, ache a ferramenta adequada. Só porque você só conhece o martelo (e você até consegue apertar alguns tipos de parafusos com ele) não é para você usar só o martelo; aprenda a usar uma chave de fenda também.
Para acessar o catálogo da loja de ferramentas, vá até:
http://download.oracle.com/javase/6/docs/api/index.html
Problemas? Use o Google Translator se tiver problemas com o inglês.
Não tenha vergonha de usá-lo. Por exemplo, ontem mesmo usei o Google Translator para ler esta notícia aqui:
http://www.trud.bg/Article.asp?ArticleId=598482
Você consegue ler isto aqui?
Nem eu. Mal e mal reconheço a palavra “prezident”. Mas o Google Translator deu a tradução - meio capenga, mas perfeitamente legível:
Ou seja, “Dilma venceu o câncer, e vai concorrer à Presidência”.
sim você tem razão. Eu estou apenas começando com as expressões regulares mesmo, então não sei as manhas ainda. Olhá só o que eu fiz:
[code]
String teste = “á%_A*unome”;
//desta forma ateh palavras que comecam com acento sao invalidas
if (teste.matches("[a-zA-Z_].*"))
System.out.println("valido");
else
System.out.println("invalido");
//jah desta forma ele aceita coisas com acento
if (teste.matches("[!#@$%¨&*0-9].*"))
System.out.println("invalido");
else
System.out.println("valido"); [/code]
No caso, para deixar liberado palavras que começam com acento, por exemplo o á, ñ, como faz? (só a nivel de curiosidade) é que se eu for listar os caracteres especiais TODOS que tem eu poderia levar um certo tempo e ainda correr riscos de esquecer algum! Então achei melhor usar a primera tecnica, da sequencia de if e else…
oq vc acha?
Ah, isso é mais chatinho que parece. Vou mostrar como é que se aceitam as mesmas letras e números (e também um _) como um identificador java:
“[\p{javaIdentifierStart}].*”
Isso pega qualquer coisa que comece por letras (acentuadas ou não) ou _ (e também $)
Dê uma olhada em:
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
e
http://download.oracle.com/javase/6/docs/api/java/lang/Character.html
hummm vc iria ficar muito bravo se eu dissesse que eu me atrapalhei com o que precisava? :roll:
preciso só validar se a string contem apenas numeros, underline e caracteres normais (sem acentuação) e que ela nao pode começar com numeros… desculpa mesmo… mas eu entendi a ideia
fiz desta maneira mas nao deu certo… se tiver caracter especial no meio ele da como válido =/
[code]String teste = “_aunome”;
if (teste.matches("[a-zA-Z_].*[a-zA-Z0-9_]"))
System.out.println("valido");
else
System.out.println("invalido");[/code]
Ele considera caracteres especiais como válido porque o ponto casa com qualquer caractere e o asterisco em seguida permite múltiplas ocorrências.
Tente assim:
"[a-zA-Z_][a-zA-Z0-9_]*"
Assim ele verifica se o primeiro caractere é uma letra ou underline e em seguida permite que hajam nenhuma, uma ou mais ocorrências de caracteres que sejam letras, números ou underline.
[quote=Eric Yuzo]Ele considera caracteres especiais como válido porque o ponto casa com qualquer caractere e o asterisco em seguida permite múltiplas ocorrências.
Tente assim:
"[a-zA-Z_][a-zA-Z0-9_]*"
Assim ele verifica se o primeiro caractere é uma letra ou underline e em seguida permite que hajam nenhuma, uma ou mais ocorrências de caracteres que sejam letras, números ou underline.[/quote]
ahhh entendi agora pro que servia o asterisco ahdsuah Nossa muito boa sua explicação, agora ficou muito mais claro onde eu estava errando., Obrigado mesmo deu certinho