DGmike

DGmike

Calma! não entre em pânico! Amanhã (talvez) tem novo post…

  • Alice Andrade
  • Rafael Zamana
  • Home
  • Guia Rápido jQuery
  • Códigos prontos
    • PHP: Função __auloload()
    • Classe sqlsimples e sql – PHP
    • Bancos, bancos e mais bancos…
  • PagSeguro
  • Artigos
    • JavaScript (parte 1)
  • Quem?

strtoupper melhorado

Posted in Programação, php by DGmike
May 19 2008
TrackBack Address.

Há uma função em PHP que coloca uma string com todas as letras maiusculas. Hmmm… todas não, ela não consegue colocar os caracteres latinos (caracteres com acentos ou cedilha) em maiúsculas. Então resolvi escrever minha própria solução:

function upper ($str) {
  $LATIN_UC_CHARS = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝ";
  $LATIN_LC_CHARS = "àáâãäåæçèéêëìíîïðñòóôõöøùúûüý";
  $str = strtr ($str, $LATIN_LC_CHARS, $LATIN_UC_CHARS);
  $str = strtoupper($str);
  return $str;
}

Para isso, usei o a função strtr que me permite “traduzir” os caracteres, trocando-os pelos seus respectivos. Ou seja, troca o primeiro caracter do primeiro parametro pelo primeiro caractero do segundo parâmetro; troca o segundo do primeiro com o segundo do segundo; terceiro do primeiro com o terceiro do segundo; quarto do primeiro com quarto do segundo e assim por diante.

Deixo aí para vocês fazerem a versão inversa, ou seja, colocar em minúsculas.

11 Comments »
Tagged as: acentos, caracteres latinos, cedilha, função, letras, maiúscula, maiusculas, minúscula, php, solução, string, strtr

Validando datas em JavaScript

Posted in Programação, javascript by DGmike
Jan 18 2008
TrackBack Address.

Se você é como eu e gosta de ficar testando as validações até achar uma solução sem falhas, este post é para você! Há alguns dias eu escrevi como validar datas em JavaScript, sendo minha primeira versão conveniente e atraente. Mas no mesmo dia, vi que ela tinha um erro: tente entrar com o dia 30 de fevereiro. Sim, ele aceita, afinal o texto passa pela expressão regular. Se você analisar, não está sendo avaliada a data em si, mas o texto (string) conforme a formatação da data.

Logo, resolvi o problema (naquele mesmo dia, mas deixei para publicar depois) usando o objeto Date. O interessante é que quando criamos um objeto Date com uma data estranha como 32 (31+1) de Dezembro de 2008, e usamos os seus métodos (getYear() por exemplo), retornará a data corrigida, ou seja 1 de janeiro de 2009 em nosso exemplo.

Pensando nisso, resolvi reescrever a data que passou pelo teste e compará-la com a data reescrita corrigida pelo objeto, desta forma avaliamos a data em si e não só a string.

Este é o código novo, para ser usado após o código anterior.

// Ok, ok... passou pelo primeiro teste, vamos ver o teste forte...

if (dataAtual != '') {
  // Dividimos a data novamente...
  // assim podemos pegar cada elemento sem dor de cabeça
  x = dataAtual.split (divisor)
  // Criando um objeto data para validação
  confere = new Date (x[2],x[1]-1,x[0])
  // Reescrevendo a data em confere2 a partir da data passada
  confere2 = (confere.getDate () < 10 ? '0' : '') + confere.getDate ()
  confere2 += divisor + ((confere.getMonth()+1) < 10 ? '0' : '') + (confere.getMonth()+1)
  confere2 += divisor + confere.getFullYear()
  // Conferindo... O interessante é que,
  // usando um objeto Date, o dia 31/11 é
  // reescrito para 01/12, invalidando a data
  if (confere2 != dataAtual) dataAtual = ''
}

E este é o código final, sem comentários:

function validaData (e) {
  var divisor = '/'
  var data = e.value
  var dataAtual = ''

  if (data.match (/^(0[1-9]|[12][0-9]|3[01]).?(0[1-9]|1[012]).?([12][0-9]{3}|[0-9]{2})$/)) {
    data = data.replace (/[^0-9]/g, '')
    dataAtual = data.substr(0,2)+divisor+data.substr(2,2)+divisor
    if ( data.substr (4).length == 4 ) dataAtual += data.substr (4)
    else dataAtual += (data.substr (4) > 30 ? '19' : '20') + data.substr (4)
  }
  if (dataAtual != '') {
    x = dataAtual.split (divisor)
    confere = new Date (x[2],x[1]-1,x[0])
    confere2 = (confere.getDate () < 10 ? '0' : '') + confere.getDate ()
    confere2 += divisor + ((confere.getMonth()+1) < 10 ? '0' : '') + (confere.getMonth()+1)
    confere2 += divisor + confere.getFullYear()
    if (confere2 != dataAtual) dataAtual = ''
  }
  e.value = dataAtual
}

O resultado funcionando está disponível para estudos no meu outro servidor, já que o wordpress não me permite mexer nos arquivos ou inserir JavaScript. (risos)

No Comments yet »
Tagged as: corrigida, data, Date Object, estudos, expressão regular, formatação, formatação da data, getDate, getFullYear, getMonth, getYear, javascript, new Date, objeto Date, problema, resultado funcionando, sem falhas, servidor, solução, string, validações, validar, validar datas, wordpress

Simplificando strings em PHP

Posted in Programação, php by DGmike
Sep 21 2007
TrackBack Address.

Sabe quando você quer inscrever um dado no banco de dados, mas pescisa que os caracteres latinos ou de outras linguas sejam alterados para sua simplificação, algo como “é” mudar para “e” ou “año” (espanol) para “ano”.

Simples, use strtr ou preg_replace. O mesmo ocorre se quisermos alterar os espaços para underline ou simplesmente removê-los da nossa string. Pois é, fui fazer uma pesquisa por “retirar acentos” e “remover cedilha” e encontrei algumas dicas, partindo delas desenvolvi uma função que faça estes trabalhos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function simplificaString ($string='',$spaces=false, $alter=0) {
  $return = strtr ($string,
    "ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ",
    "SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy"
  );
  if ($spaces !== false) {
    $return = str_replace (' ', ($spaces===true?'':$spaces) , $return);
  }
  switch ($alter) {
    case 1:  $return = strtoupper($return);
    case -1: $return = strtolower($return);
  }
  return $return;
}

A função recebe dois parâmetros:

$string – a string que você quer simplificar
$spaces – troca os espaços por um caractere que você desejar ou mesmo retirar os espaços, se este parametro for passado como false os espaços não serão removidos.

Usando a função

Da melhor forma, uma função pequena que faz grandes coisas. Para fazer mais desastres, basta implementá-la com outra função que receba uma string.

1
2
3
4
5
6
7
8
9
10
$string="Aqui está começando a chover";
 
simplificaString ($string); // Retorno: Aqui esta comecando a chover
simplificaString ($string,"_"); // Retorno: Aqui_esta_comecando_a_chover
simplificaString ($string,"-"); // Retorno: Aqui-esta-comecando-a-chover
simplificaString ($string,""); // Retorno: Aquiestacomecandoachover
strtolower (simplificaString ($string,"_")); // Retorno: aqui_esta_comecando_a_chover
 
simplificaString ($string,"-", 1); // Retorno: AQUI-ESTA-COMECANDO-A-CHOVER
simplificaString ($string,"-", -1); // Retorno: aqui-esta-comecando-a-chover

[update] Acertei as chamadas nos exemplos. Valeu Zamana :D

[update] O Wordpress está de sacanagem comigo, quando vou fazer um “update” ou editar os posts com comentários eles vem com caracteres especiais muito bizarros, então só hoje consegui arrumar o código, pois ele foi escrito em minha empresa, e como todos sabem, começamos a trabalhar hoje (segunda-feira) :)

[update] A função ganhou mais um parâmetro, agora você pode em uma única função deixar a string em maiúsculas ou minúsculas.

8 Comments »
Tagged as: acento, acentos, acentuação, ascii, c cedilha, caracteres, caracteres especiais, caracteres latinos, cê cedilha, cedilha, html, latin, latino, maiusculas, minúsculas, php, remover, remover acentos, retira acento, retirar acentos, simples, simplificar, string, url, utf-8

Categorias

  • Amigos  (16)
  • cases  (4)
  • Cotidiano  (71)
  • CSS  (19)
  • Design  (1)
  • Dia-a-dia  (30)
  • Diversão  (18)
  • eventos  (10)
  • extensions  (11)
  • flash  (3)
  • Games  (1)
  • html  (5)
  • icephp  (4)
  • Ilustração  (6)
  • Imagem  (8)
  • Inspiração  (5)
  • javascript  (35)
    • jQuery  (7)
    • yui  (2)
  • Não categorizado  (26)
  • Navegadores  (17)
    • Chrome  (4)
    • Firefox  (16)
    • Internet Explorer  (5)
  • pagseguro  (10)
  • php  (42)
    • PHP Conference  (3)
  • plugin  (3)
  • Programação  (43)
  • python  (5)
  • Semântica  (16)
  • sql  (9)
  • tableless  (18)
  • Tecnologia  (47)
  • Trabalho  (27)
  • Tutorial  (24)
  • Vetorial  (5)
  • video  (7)
  • video-tutorial  (5)
  • Windows  (4)
  • wordpress  (2)
  • xHTML  (23)

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql online opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql string tableless Tecnologia twitter visie web wordpress

Arquivo

SlideSare

Últimos Posts

  • [QuickPOST] Vagas de emprego
  • Dados de teste
  • Aprendendo com o técnico: quanto cobrar em um projeto web
  • Frete com PagSeguro: simples!
  • Palestra PagSeguro na Impacta

Amigos

  • Alice Andrade
  • Rafael Zamana
Powered by WordPress | “Blend” from Spectacu.la WP Themes Club