On 16-10-2015 13:38, Tiago José Adami wrote:
>> O problema é que o campo está sem mascara e telefones convencionais juntos,
>> ou seja aquela bagunça de sempre,
>> exemplo:
>> 48-33333333
>> 49-9999-0000
>> 049-9999-0000
>> (49)9999-0000
>> (49)99990000
>>
>> por isso queria ver se alguem tinha alguma função para compartilhar, algo do
>> tipo regex, pois não consigo entender como funciona essa parada.
>
> Opa, veja se isso te ajuda. São duas funções: uma para formatar os
> números removendo caracteres não numéricos e a outra que compara e
> verifica se é um número de telefone móvel começando com os dígitos 8
> ou 9 (considerando que esta é a regra):
>
> CREATE OR REPLACE FUNCTION uf_format_phone_number(
> a_number BPCHAR
> )
> RETURNS BPCHAR AS
> $BODY$
> DECLARE
> lc_number BPCHAR;
> lc_char BPCHAR;
> li_len INTEGER;
> BEGIN
> li_len := LENGTH(a_number);
> lc_number := '';
>
> FOR i IN 1..li_len LOOP
> lc_char = SUBSTR(a_number,i,1);
>
> IF POSITION(lc_char IN '0123456789')<=0 THEN
> CONTINUE;
> END IF;
>
> lc_number := lc_number || lc_char;
> END LOOP;
>
> lc_number := CAST(CAST(lc_number AS NUMERIC(20,0)) AS BPCHAR);
>
> RETURN lc_number;
>
> END;
> $BODY$
> LANGUAGE 'plpgsql' IMMUTABLE;
>
>
> CREATE OR REPLACE FUNCTION uf_is_mobile_number(
> a_number BPCHAR
> )
> RETURNS BOOLEAN AS
> $$
> SELECT uf_format_phone_number(a_number) ~ '^[1-9]{2}[8-9][0-9]{7,8}$'
> $$
> LANGUAGE SQL;
>
> Eu fiz estas funções conferindo a explicação de um post no
> StackOverflow [1] sobre regex para o mesmo fim.
>
> Para verificar se um número é ou não de telefonia móvel, use a função
> 'uf_is_mobile_number':
>
> SELECT uf_is_mobile_number('(099)9999-9999');
>
>
> Referências:
> [1]
> http://pt.stackoverflow.com/questions/46672/como-fazer-uma-express%C3%A3o-regular-para-telefone-celular
> Tiago, Bem interessante, porque vc não adiciona isso ao nosso wiki [1]. Att, [1] https://wiki.postgresql.org/wiki/Snippets -- Fabrízio de Royes Mello Timbira - http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
signature.asc
Description: OpenPGP digital signature
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
