Expressões Regulares úteis

Observação
Os valores apresentados foram gerados automaticamente para a realização dos testes.

E-mail

$email = array(
    0 => 'teste@teste.com',
    1 => 'teste123@teste.com.br',
    2 => 'teste.teste.teste@teste.gov.sp.br',
    3 => 'teste_teste@teste.net.br'
);

foreach($email as $e){
    preg_match('/[a-z0-9.\_]+@[a-z0-9.\_]+\.[a-z]{2,4}/',$e,$resultado);
}
E-mail Resultado
teste@teste.com teste@teste.com
teste123@teste.com.br teste123@teste.com.br
teste.teste.teste@teste.gov.sp.br teste.teste.teste@teste.gov.sp.br
teste_teste@teste.net.br teste_teste@teste.net.br

Telefone

$tel = array(
    0 => '1234 5678',
    1 => '1234.5678',
    2 => '1234-5678',
    3 => '11 1234 5678',
    4 => '11 1234.5678',
    5 => '11 1234-5678',
    6 => '(11) 1234 5678',
    7 => '(11) 1234.5678',
    8 => '(11) 1234-5678',
    9 => '55 11 1234 5678',
    10 => '55 11 1234.5678',
    11 => '55 11 1234-5678',
    12 => '55 (11) 1234 5678',
    13 => '55 (11) 1234.5678',
    14 => '55 (11) 1234-5678',
);

foreach($tel as $t){
    preg_match('/([0-9]{1,3})? ?\(?([0-9]{2,3})?\)? ?[0-9]{4} ?.?-?[0-9]{4}/',$t,$resultado);
}
Telefone Resultado
1234 5678 1234 5678
1234.5678 1234.5678
1234-5678 1234-5678
11 1234 5678 11 1234 5678
11 1234.5678 11 1234.5678
11 1234-5678 11 1234-5678
(11) 1234 5678 (11) 1234 5678
(11) 1234.5678 (11) 1234.5678
(11) 1234-5678 (11) 1234-5678
55 11 1234 5678 55 11 1234 5678
55 11 1234.5678 55 11 1234.5678
55 11 1234-5678 55 11 1234-5678
55 (11) 1234 5678 55 (11) 1234 5678
55 (11) 1234.5678 55 (11) 1234.5678
55 (11) 1234-5678 55 (11) 1234-5678

CEP

$cep = array(
    0 => '78990-000',
    1 => '78990000',
);

foreach($cep as $c){
    preg_match('/[0-9]{5}-?[0-9]{3}/',$c,$resultado);
}
CEP Resultado
78990-000 78990-000
78990000 78990000

Data

$data = array(
    0=>'1/12/12',
    1=>'01/12/12',
    2=>'1/1/12',
    3=>'01/1/12',
    4=>'1/12/2012',
    5=>'01/12/2012',
    6=>'1/1/2012',
    7=>'01/1/2012',
);

foreach($data as $d){
    preg_match('/(3[01]|[12][0-9]|0?[1-9])\/(1[012]|[1-9])\/(19[0-9]{2}|20[0-9]{2}|[0-9]{2})/',$d,$resultado);
}
Data Resultado
1/12/12 1/12/12
01/12/12 01/12/12
1/1/12 1/1/12
01/1/12 01/1/12
1/12/2012 1/12/2012
01/12/2012 01/12/2012
1/1/2012 1/1/2012
01/1/2012 01/1/2012

CPF

$cpf = array(
    0=>'264.786.667-86',
    1=>'26478666786'
);

foreach($cpf as $c){
    preg_match('/([0-9]{3}).?([0-9]{3}).?([0-9]{3})-?([0-9]{2})/',$c,$resultado);
}
CPF Resultado
264.786.667-86 264.786.667-86
26478666786 26478666786

Validação de CPF

CNPJ

$cnpj = array(
    0 => '47.213.669/0001-25',
    1 => '47213669000125'
);

foreach($cnpj as $c){
    preg_match_all('/([0-9]{2}).?([0-9]{3}).?([0-9]{3})\/?([0-9]{4})-?([0-9]{2})/',$c,$resultado);
}
CPF Resultado
47.213.669/0001-25 47.213.669/0001-25
47213669000125 47213669000125

Valicação de CNPJ

RG

$rg = array(
    0 => '41.875.789-6',
    1 => '418757896',
);

foreach($rg as $r){
    preg_match('/[0-9]{2}.?[0-9]{3}.?[0-9]{3}-?[0-9]/',$r,$resultado);
}
RG Resultado
41.875.789-6 41.875.789-6
418757896 418757896
Anúncios

Validando CPNJ

<?php
$cnpj = '47.213.669/0001-25';
#$cnpj = '47213669000125';
preg_match('/([0-9]{2}).?([0-9]{3}).?([0-9]{3})\/?([0-9]{4})-?([0-9]{2})/',$cnpj,$resultado);

if($resultado !== false){
    $fator1=5;
    $fator2=6;
    $fator3=$fator4=9;
    $soma1=$soma2=0;

    for($i=1;$i<5;$i++){
            $aux = str_split($resultado[$i]);
            
            foreach($aux as $a){
                    if($fator1>=2){
                            $soma1=$soma1+($fator1*$a);
                            $fator1--;
                    }else{
                            $soma1=$soma1+($fator3*$a);
                            $fator3--;
                    }
                     
                     if($fator2>=2){
                            $soma2=$soma2+($fator2*$a);
                            $fator2--;                                
                    }else{                                
                            $soma2=$soma2+($fator4*$a);                                
                            $fator4--;
                    }
            }
    }

    $digito1=(($soma1%11)>3) ? (11-($soma1%11)) : 0;

    $soma2=$soma2+($digito1*2);
    $digito2=(($soma2%11)>2) ? (11-($soma2%11)) : 0;

    echo (($digito1==$resultado[5][0]) and ($digito2==$resultado[5][1])) ? 'O CNPJ '.$cnpj.' é válido!' : 'O CNPJ '.$cnpj.' é inválido!';
}
?>

Fonte
iMasters – Thiago Prado

Procurando palavras (com e sem acentos) com hível no texto

$palavra = array(
    0 => 'Habitação',
    1 => 'àquelas',
    2 => 'Guarda-chuva',
    3 => 'vê-las'
);

foreach($palavra as $p){
    preg_match('/[A-ZÀ-Úa-zà-ú]*/',$p,$resultado);
    var_dump($resultado);
}
Palavra Resultado
Habitação Habitação
àquelas àquelas
Guarda-chuva Guarda
vê-las

Nota-se que a palavra com hífen não é retornada por completo.

$palavra = array(
    0 => 'Habitação',
    1 => 'àquelas',
    2 => 'Guarda-chuva',
    3 => 'vê-las'
);

foreach($palavra as $p){
    preg_match('/[A-ZÀ-Úa-zà-ú]+(?:-[A-ZÀ-Úa-zà-ú]+)?/',$p,$resultado);
    var_dump($resultado);
}
Palavra Resultado
Habitação Habitação
àquelas àquelas
Guarda-chuva Guarda-chuva
vê-las vê-las

Links pesquisados

Referência

Procurando palavras com e sem acentos no texto

A expressão [A-Z] localiza qualquer letra de A à Z sem acentuação no texto.
Exemplo:

$palavra = array(
    0 => 'Casa',
    1 => 'Sapato',
    2 => 'Ação',
    3 => 'Árvores'
);

foreach($palavra as $p){
    preg_match('/[A-Z]/',$p,$resultado);
}

O preg_match vai retornar a primeira letra encontrada na palavra:

Palavra Resultado
Casa C
Sapato S
Ação A
Árvores [vazio]

A expressão [a-z] localiza qualquer letra de a à z sem acentuação no texto.
Exemplo:

$palavra = array(
    0 => 'Casa', 
    1 => 'Sapato',
    2 => 'Ação', 
    3 => 'Árvores'
);

foreach($palavra as $p){
    preg_match('/[a-z]/',$p,$resultado);
}

O preg_match vai retornar a primeira letra encontrada na palavra:

Palavra Resultado
Casa a
Sapato a
Ação o
Árvores r

Se colocarmos as duas expressões juntas,

$palavra = array(
    0 => 'Casa', 
    1 => 'Sapato',
    2 => 'Ação', 
    3 => 'Árvores'
);

foreach($palavra as $p){
    preg_match('/[A-Za-z]/',$p,$resultado);
    var_dump($resultado);
}

O preg_match continuará procurando e retornando a primeira letra encontrada na palavra:

Palavra Resultado
Casa a
Sapato a
Ação o
Árvores r

Até agora só conseguimos retornar uma letra, para retornar uma ou mais caracteres deve ser utilizado o sinal de + e para nenhum ou mais caracteres deve ser utilizado o sinal de *.

$palavra = array(
    0 => 'Casa', 
    1 => 'Sapato',
    2 => 'Ação', 
    3 => 'Árvores'
);

foreach($palavra as $p){
    preg_match('/[A-Za-z]*/',$p,$resultado);
    var_dump($resultado);
}

O preg_match vai retornar:

Palavra Resultado
Casa Casa
Sapato Sapato
Ação A
Árvores [vazio]

Reparem que as palavras acentuadas não foram retornadas por inteiro. A expressão [À-Ú] retorna todas as letras de A à Z que recebem acentuação. Para as letra minúsculas, a expressão [à-ú] retorna todas as letra de a à z que recebem acentuação.


$palavra = array(
    0 => 'Casa', 
    1 => 'Sapato',
    2 => 'Ação', 
    3 => 'Árvores'
);

foreach($palavra as $p){
    preg_match('/[A-ZÀ-Úa-zà-ú]*/',$p,$resultado);
    var_dump($resultado);
}

O preg_match vai retornar:

Palavra Resultado
Casa Casa
Sapato Sapato
Ação Ação
Árvores Árvores

Links pesquisados

Referência

[PHP ] Validando o CPF

$cpf = '264.786.667-86';
#$cpf = '26478666786';

preg_match('/([0-9]{3}).?([0-9]{3}).?([0-9]{3})-?([0-9]{2})/',$cpf,$resultado);

if($resultado !== false){
        $fator1=10;
        $fator2=11;
        $soma1=$soma2=0;

        for($i=1;$i<4;$i++){
                $aux=str_split($resultado[$i]);
                foreach($aux as $a){
                        $soma1=$soma1+$a*$fator1;
                        $fator1=$fator1-1;

                        $soma2=$soma2+$a*$fator2;
                        $fator2=$fator2-1;
                }
        }
        
        $digito1 = ($soma1%11>2) ?(11 - ($soma1%11)) : 0;
        
        $soma2=$soma2+($digito1*2);
        $digito2 = ($soma2%11>3) ? 11 - ($soma2%11) : 0;
        
        echo ($digito1 == $resultado[4][0] and $digito2 == $resultado[4][1]) ? "O CPF '.$cpf.' é válido!" : "O CPF '.$cpf.' é inválido!";
}

Fonte
iMasters – Thiago Prado