1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

RegExp - Nomes com acentos

Discussão em 'Web Development' iniciada por OldMan, 13 de Abril de 2009. (Respostas: 10; Visualizações: 9789)

  1. OldMan

    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 */
    
    }
    
     
  2. AliFromCairo

    AliFromCairo Power Member

    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.
     
  3. OldMan

    OldMan Power Member

    @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
     
  4. AliFromCairo

    AliFromCairo Power Member

    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 */
    
    }
    
     
  5. OldMan

    OldMan Power Member

    Yap, isso funciona no Reggy, mas no javascript já não.
    Não está a aceitar "João".
     
  6. AliFromCairo

    AliFromCairo Power Member

    Hmm, estranho, eu testei a expressão que coloquei acima com essa string, e funcionou. Experimenta limpar a cache do teu browser.
     
  7. OldMan

    OldMan Power Member

    Onde testaste? Posso estar a fazer algo de errado para além da regexp.
     
  8. AliFromCairo

    AliFromCairo Power Member

    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>
     
     
  9. MadOnion

    MadOnion Folding Member

    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
     
  10. OldMan

    OldMan Power Member

    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!
     
  11. wyldkat

    wyldkat Power Member

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

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

Partilhar esta Página