Sunday, September 26, 2010

Auto Refreshing News System With Built-In HTML Search

Have you ever developed a web Project that needed an auto refreshing data all the time?

If not you will probably have to soon.

This is my new post on Woork Up! Check it out:

Thursday, July 22, 2010

Expressões Regulares



A intenção deste post é organizar num lugar as principais e mais simples características das expressões regulares. Desta forma serve tanto para quem está começando para quem deseja consultar.


Então, vamos lá!



O que são expressões regulares?

São conjutos de caracteres e símbolos que, quando agrupados corretamente, formam uma expressão.


"É como o brinquedo LEGO, várias pecinhas diferentes, cada uma com sua característica, que juntas compõem estruturas completas e podem ser arranjadas com infinitas combinações diferentes." guia-er


Para que servem?

Expressões regulares ajudam a você definir padrões mais específicos que te ajudarão a buscar e/ou alterar em um contexto mais abrangente.


Exemplo

[rpg]ato combinará com: gato, rato e pato.


Mas expressões vão muito além disto, no dia-a-dia seu uso é muito prática para manipular diversos dados como: data/hora, endereço de email, telefones, cpf, conteudos de , praticamente qualquer coisa!


Mãos a massa!



Metacaracteres

Representantes Definição Exemplos
. ponto Um caractere qualquer Casa com qualquer coisa, inclusive com si próprio
n.o = não, nao, ...
13.15 = 13:15, 13 15, 13.15

[] lista [...] - Lista de caracteres permitidos
Casa quem quem conhece.

Dentro da lista, todo mundo é "normal".
- significa intervalo

[0123456789] = [0-9]
n[ãa]o = não, nao
a-z, A-Z pega "[\]^_" mas não pega os caracteres acentuados "aéóõç".
[^] lista negada [^...] - Lista de caracteres proibidos
Segue todas as regras de uma lista "comum"
^ não deve ser o primeiro item da lista.
A lista negava deve casar algo

[^0-9] casa tudo que não for número, inclusive espaços em branco, símbolos, letras, qualquer coisa.
Quantificadores Indicam o número de repetições permitidas para a entidade anterior exemplos
? opcional zero ou um
Torna o caracter anterior opcional
é util para procurar palavras no singular e pluar

carros? carro, carros
* asterisco zero, um ou mais A entidade anterior pode aparecer em qualquer quantidade.
6*0 = 0, 60, 660, 6660, ..., 66666666666666660, ...
+ mais um ou mais
Funcionamento idêntico ao *, a única diferença é que o + não é opcional.
A entidade anterior tem que casar pelo menos uma vez.

6+0 = 60, 660, ..., 666666666660, ...
bi+p = bip, biip, biiip, biiiip, ...
{n,m} chaves de n até m
Solução controlada para especificar exatamente quantas repetições se deseja da entidade anterior
Você pode especificar um úmero exato, um mínimo, um máximo ou uma faixa numérica.

{1,5} = de 1 a 5
{5,} = pelo menos 5
{3} = exatamente 3
Âncoras Caracteres que marcam uma posição específica na linha Exemplos
^ circunflexo
Marca início de uma linha.
^Só tem esta função no começo da linha.

^[0-9] = O primeiro item da linha deve ser um número
$ cifrão fim da linha
^$ Linha vazia
^.{10,20}$ = Linha que tenha entre 10 e 20 caracteres
\b borda início ou fim de uma palavra O conceito "palavra" engloba letras, número e sublinhado
dia = dia, diafragma, melodia, bom-dia
\bdia = dia, diafragma, bom-dia
dia\b = dia, melodia, bom-dia
\bdia\b = dia, bom-dia
Outros Exemplos
\ escape torna literal o caractere literal
\* = [*] = asterisco literal
\. = .
\\ = \
| ou um ou outro
.[php|html]
() grupo delimitador de um grupo
(ha!)+ ha!, ha!ha!, ha!ha!ha!, ...
(super|hiper)mercado
\1 retrovisor \1...\9 - Texto casado nos grupos 1...9
(quero-\1) quero-quero
([A-Za-z]+)-\1
(lenta)(mente) é \2 \1 lentamente é mente lenta



Todo conteúdo acima foi inspirado no livro e site abaixo. Quem se interessar corra atrás, compre o livre, porque vale muito a pena!
http://guia-er.sourceforge.net/

PHP - Validando CPF

Olá, pessoal!

Segue abaixo uma classe muito útil para quem precisa validar CPF's.

class CCpfValidator extends CValidator {
    protected function validateAttribute($model,$attribute) {
        $value = $model->$attribute;
        if (!$this->_validateCpf($value)) {
            $model->addError($attribute,"Você deve informar um CPF válido.");
        }
    }

    protected function _validateCpf($cpf) {
        if ($cpf == '12345678909') return false;
        if (!preg_match("/^[0-9]{11}$/",$cpf)) return false;

        $soma1 = $soma2 = array();
        for ($x = 0; $x < 10; $x++) {
            if ($cpf == str_repeat($x, 11)) return false;
            if ($x < 9) $soma1[] = $cpf[$x] * (10 - $x);
            $soma2[] = $cpf[$x] * (11 - $x);
        }

        $soma1 = array_sum($soma1) % 11;
        $soma2 = array_sum($soma2) % 11;

        if(($soma1<2?0:11-$soma1)!=$cpf{9})return false;
        return (($soma2<2?0:11-$soma2)==$cpf{10});
    }
}

Tuesday, July 20, 2010

Top 20+ Best Mysql Pratices

This is a great article about mysql best pratices. You just must take a look.

Direct link: http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

Using jQuery to search in HTML

What are we going to do?


How?


The example HTML structure
<div id="search">
            <input type="text" name="q" />
</div>

        <ul id="content">
            <li>Donec posuere lobortis urna, sit amet adipiscing purus blandit vel.</li>
            <li>Morbi in sem quis dui placerat ornare. Pellentesque odio nisi.</li>
            <li>Praesent dapibus, neque id cursus faucibus. </li>
            <li>Phasellus ultrices nulla quis nibh. Quisque a lectus.</li>
            <li>Duis tempus turpis in neque sagittis at adipiscing. Nulla congue turpis ac turpis aliquet placerat.</li>
            <li>Pellentesque fermentum dolor.</li>
        </ul>

JS

$(function(){

        /**
        * Fix to disable case-sensitive
        **/
        $.expr[':'].icontains = function(obj, index, meta, stack){
            return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
        };

        $("div#search input[type=text]").keydown(function(e){
            var $input = $(this);
            if($input.val() != ''){
                $('ul#content li').hide();
                $('ul#content li:icontains('+$input.val()+')').show();
            }
        });
    });

Optional CSS
body{
                margin:0;
            }

            div#search{
                background:#ddd;
                border-bottom:1px solid #bbb;
                padding:3px 10px;
            }

            div#search input[type=text]{
                border:1px solid #aaa;
                width:100%;
                font-size:16px;
            }

            ul#content{
                margin:0;
                padding:0;
                list-style:none;
            }

            ul#content li{
                background:#E0EDFF;
                border-bottom:1px solid #BACCE6;
                padding:3px 5px;
            }

Example of use

A good place to use this technique is on a chat list. You'll search all your contacts without refreshing or sending many ajax requests. Just asking your HTML!

Usando jQuery para procurar no HTML

O que vamos fazer?


Como?


A estrutura HTML do exemplo
<div id="search">
            <input type="text" name="q" />
</div>

        <ul id="content">
            <li>Donec posuere lobortis urna, sit amet adipiscing purus blandit vel.</li>
            <li>Morbi in sem quis dui placerat ornare. Pellentesque odio nisi.</li>
            <li>Praesent dapibus, neque id cursus faucibus. </li>
            <li>Phasellus ultrices nulla quis nibh. Quisque a lectus.</li>
            <li>Duis tempus turpis in neque sagittis at adipiscing. Nulla congue turpis ac turpis aliquet placerat.</li>
            <li>Pellentesque fermentum dolor.</li>
        </ul>

JS

$(function(){

        /**
        * Fix para desabilitar o case-sensitive
        **/
        $.expr[':'].icontains = function(obj, index, meta, stack){
            return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
        };

        $("div#search input[type=text]").keydown(function(e){
            var $input = $(this);
            if($input.val() != ''){
                $('ul#content li').hide();
                $('ul#content li:icontains('+$input.val()+')').show();
            }
        });
    });

CSS Opcional
body{
                margin:0;
            }

            div#search{
                background:#ddd;
                border-bottom:1px solid #bbb;
                padding:3px 10px;
            }

            div#search input[type=text]{
                border:1px solid #aaa;
                width:100%;
                font-size:16px;
            }

            ul#content{
                margin:0;
                padding:0;
                list-style:none;
            }

            ul#content li{
                background:#E0EDFF;
                border-bottom:1px solid #BACCE6;
                padding:3px 5px;
            }

Exemplo de uso

Um bom lugar parar usar esta técnica é numa lista de contatos de um chat, por exemplo. Você irá procurar automaticamente sem precisar atualizar ou enviar muitas requisições ajax. Apenas pergunte ao seu HTML! (: