Jump to content
filipex_27

Expressão regular nomes portugueses

Recommended Posts

filipex_27

boas,

preciso de uma expressão regular que valide algo do tipo -> Nome - Número(Max 5 digitos) (Ex. Maria Manel - 1111)...Até agora tenho algo do tipo:

(^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*\s-\s[0-9]{0,5}$)

isto está a funcionar em parte porque quando meto algo do tipo José Maria - 2222 ou Graça das Cruzes - 3333 isto estoira por causa do "é" e do "ç" alguém sabe como incluir caracteres acentuados e o ç na expressao regular?

Obrigado

Share this post


Link to post
Share on other sites
mjamado

É, os regex do JS são uma nódoa com unicode...

libs por aí que lidam com isto. Pessoalmente, prefiro não estar a incluir mais uma lib; quando preciso disto, faço uma aproximação grosseira, copiando para uma nova string, convertendo todos os caracteres com diacríticos para a sua versão "normal", e depois aplico o regex. Se passar, devolvo a string original.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
filipex_27

cheguei a uma solução...

^[a-zA-ZÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]+(([\'\,\.\- ][a-zA-ZÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ])?[a-zA-ZÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ]*)*(\s-\s)([0-9]{1,5})$

porém como podem ver é uma solução assim mais para o desenrasca...

Share this post


Link to post
Share on other sites
falco
É, os regex do JS são uma nódoa com unicode...

Ou seja, com a web... Mas isso é um problema em muitas linguagens... Eu recomendo que não faças isso com js... Duvido que realmente te interesse validar isso dessa forma... Provavelmente interessa-te mais validar se tens conteúdo num campo/variável. Depois se queres fazer validação do conteúdo em si faz do lado do servidor, com Perl... Porque o lado do cliente não é de confiança e o Perl suporta bem Unicode (pelo menos com versões recentes de Perl é melhor que a maior parte das linguagens).

Isto também te deve interessar...

http://stackoverflow.com/questions/280712/javascript-unicode

E lembra-te que normalmente há classes especiais para fazer o match de unicode \N{}, \x{}, etc... Recomendo-te que leias a documentação da implementação das regexp que utilizas/vais utilizar.

Share this post


Link to post
Share on other sites
pmg

Então e se for

/^[^0-9]+ - [0-9]{1,5}$/

Para uma sequencia de 1 ou mais qualquer coisa excepto digitos seguido de espaço, traço, espaço e uma sequência de 1 a 5 digitos?


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mjamado

Então e se for

/^[^0-9]+ - [0-9]{1,5}$/

Para uma sequencia de 1 ou mais qualquer coisa excepto digitos seguido de espaço, traço, espaço e uma sequência de 1 a 5 digitos?

Evitar ao máximo fazer blacklisting, preferir sempre whitelisting. A solução proposta pelo OP é mais segura. Por exemplo, a tua solução é vulnerável a XSS (se bem que qualquer coisa em JS no cliente é sempre vulnerável, mas não sabemos se o OP está a trabalhar com, por exemplo, Node.js).


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
filipex_27

a operação que faço é crítica, tanto que também faço a verificação server-side com o preg_match em php!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.