Você tem medo de REGEX!? Eu também!
Nos últimos tempos tenho lidado bastante com REGEX editando regras do Apache mod_rewrite e com a classe que publiquei no PHPClasses, a SiteMapGenerator Tabajara, que se propõe a gerar um mapa do site em xml no padrão estabelecido pelo Google para melhorar a indexação.
Mas depois de tirar onda da galera do Perl no post anterior, vou exaltar a importância que expressões regulares têm nas nossas validações, e para isso vou citar as 8 expressões regulares que todo programador Web deveria saber (exemplos em PHP, mas são válidos para qualquer linguagem com suporte a PCRE).
Validação de nomes de usuário
4 a 28 caracteres alfanuméricos e underscores:
$string = "userNaME4234432_";
if (preg_match('/^[a-z\d_]{4,28}$/i', $string)) {
echo "exemplo 1 ok.";
}
Validação de números de telefone
(##) ####-#### ou ##-####-####
$string = "(32) 5555-5555";
if (preg_match('/^(\(?[0-9]{2}\)?|[-. ]?)[ ][0-9]{4}[-. ]?[0-9]{4}$/', $string)) {
echo "exemplo 2 ok.";
}
Endereços de e-mail
foo@bar.foo
$string = "first.last@domain.co.uk";
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.]
[a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',
$string)) {
echo "examplo 3 ok.";
}
CEPs
#####-### ou ########
$string = "55324-432";
if (preg_match('/^[0-9]{5,5}([- ]?[0-9]{4})?$/', $string)) {
echo "exemplo 4 ok.";
}
Endereços IP
255.255.255.0
$string = "255.255.255.0";
if (preg_match('^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:[.](?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$'
, $string)) {
echo "exemplo 5 ok.";
}
Código de cores RGB em Hexadecimal
#FFFFFF, #FFF, FFF, FFFFFF
$string = "#666666";
if (preg_match('/^#(?:(?:[a-f\d]{3}){1,2})$/i', $string)) {
echo "exemplo 6 ok.";
}
Comentários de múltiplas linhas
/* Lorem
Ipsun
dolor*/
$string = "/* commmmment */";
if (preg_match('/^[(/*)+.+(*/)]$/', $string)) {
echo "exemplo 7 ok.";
}
Datas
DD/MM/YYYY ou MM/DD/YYYY
$string = "30/01/2008";
if (preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $string)) {
echo "exemplo 8 successful.";
}
Esses exemplos foram retirados do site Devolio[1] , porém algumas expressões eu alterei para ajustar aos padrões brasileiros de telefone e cep. Se por acaso fiz alguma besteira, peço que um REGEXPERT comente e corrija! E no segundo link[2] um validador de expressões regulares.
[1] 8 Practical PHP Regular Expressions – Devolio
[2] Perl Compatible Regular Expression Tester
Super bacana, merece um favorito! Eu também tenho medo de regex. Quando aprendi, fiz um sistema de validação de datas em JavaScript (incluindo teste por anos bissextos).
Quem se interessar pode ver a construção deste teste no meu antigo blog: http://www.codigocomcafe.com/2009/08/validando-datas-com-javascript-e-regex/