RegExp - Nomes com acentos

OldMan

Power Member
Boas!

Reparei hoje que a RegExp que usava para validar o campo que vai guardar o nome não estava a aceitar nomes com acentos (João, José, Hönger, etc). Tentei algo como isto:
Código:
[a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄ\s\'\-]
No Reggy ele parece estar a filtrar bem, mas no javascript nem tanto:
asfasfas - pass
1235235 - fail
/)&=)()/ - fail
asf412412 - pass
asf(&/(&)( - pass


Estes dois últimos não era suposto terem passado, até porque no Reggy não passavam. Que estou eu a fazer mal?

Código:
txtRegExp = /[a-zA-Z][éúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄ\-\'\s]?/;

if (!name.match(txtRegExp)){

	/* bla bla bla bla */

}
 
Boas, o que essa expressão regular está a fazer é verificar se a string que estás a testar contém pelo menos uma letra, daí as strings asf412412 e asf(&/(&)( estarem a passar. Podes utilizar o ^ e $ no início, e no final da expressão regular, respectivamente, para indicares que não pretendes fazer match de mais nada para além do indicado na expressão regular.
 
@AliFromCairo, era isto que dizias?

Código:
txtRegExp = "^[a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄ\-\'\s]$";

if (!name.match(txtRegExp)){

	/* bla bla bla bla */

}

Neste momento não passa nada:
coisas - fail
c01sas - fail
12345 - fail
)(&)/() - fail
 
Precisas de indicar que aceitas mais que um carácter, ou seja:

Código:
txtRegExp = /^[a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄ\-\'\s][B][COLOR=Red]+[/COLOR][/B]$/;

if (!name.match(txtRegExp)){

	/* bla bla bla bla */

}
 
No Firefox e no IE. O código que utilizei é o seguinte:

Código:
 <html>
 <head>
 <script type="text/javascript">
 function test() {
     name = document.getElementById("name").value;
     txtRegExp = /^[a-zA-ZéúíóáÉÚÍÓÁèùìòàÈÙÌÒÀõãñÕÃÑêûîôâÊÛÎÔÂëÿüïöäËYÜÏÖÄ\-\'\s]+$/;
     if (!name.match(txtRegExp)){
         alert("!match");
     } else {
         alert("match");
     }
 }
 </script>
 </head>
 <input id="name" type="text"/>
 <input type="submit" onclick="test()"/>
 <body>
 </body>
 </html>
 
Também tive essa duvida à duas semanas:Thread

A solução que encontrei foi usar o unicode:
Código:
/^[a-z\u00C0-\u00ff A-Z]+$/;

Espero que seja útil

Confesso que desta vez nem cheguei a procurar já que há uns dias criei outra thread sobre regexp e nessa altura procurei e não me lembro de ter encontrado o que queria.

Anyway, parece que isso resolveu. Vou deixar com essa, caso encontre algum "bug" venho aqui.

Obrigado aos dois!
 
Bem, eu tenho esta no JS que valida o meu form para os nomes:

var onlytextRegex = /^[a-z' 'A-ZãÃáÁàÀêÊéÉèÈíÍìÌôÔõÕóÓòÒúÚùÙûÛçÇ.;:,ºª]+$/;

Confesso que não percebi lá muito bem o que está aí, mas funciona x). Se quiseres, experimenta ;)
 
Back
Topo