Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Javascript: expressões regulares


Faros

Pergunta

estou fazendo um validador de campos de form, utilizando java script: expressões regulares, que só permite entradas de dados corretos para cada tipo de campo (sem mostrar janela de erro), meus conhecimentos de Javascript são limitados e estou com dificuldades em alguns campos, mais especificamente no campo de dados de hora, nele justamente horas invalidas estão sendo aceitas e as corretas são apagadas. alquem poderia dar uma olhadinha no código abaixo?

Agradeço antecipadamente.

<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />


&lt;script>

function mascara(o,f){
v_obj=o
v_fun=f
setTimeout("execmascara()",1)
}

function execmascara(){
v_obj.value=v_fun(v_obj.value)
}


function soLetras(v){
return v.replace(/\d/g,"") //Remove tudo o que não é Letra
}

function soLetrasMA(v){
v=v.toUpperCase() //Maiúsculas
return v.replace(/\d/g,"") //Remove tudo o que não é Letra ->maiusculas
}

function soLetrasMI(v){
v=v.toLowerCase() //Minusculas
return v.replace(/\d/g,"") //Remove tudo o que não é Letra ->minusculas
}

function soNumeros(v){
return v.replace(/\D/g,"") //Remove tudo o que não é dígito
}

function telefone(v){
v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/^(\d\d)(\d)/g,"($1) $2") //Coloca parênteses em volta dos dois primeiros dígitos
v=v.replace(/(\d{4})(\d)/,"$1-$2") //Coloca hífen entre o quarto e o quinto dígitos
return v
}

function cpf(v){
v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/(\d{3})(\d)/,"$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos
v=v.replace(/(\d{3})(\d)/,"$1.$2") //Coloca um ponto entre o terceiro e o quarto dígitos
//de novo (para o segundo bloco de números)
v=v.replace(/(\d{3})(\d{1,2})$/,"$1-$2") //Coloca um hífen entre o terceiro e o quarto dígitos
return v
}

function cep(v){
v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/^(\d{5})(\d)/,"$1-$2") //Esse é tão fácil que não merece explicações
return v
}

function cnpj(v){
v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/^(\d{2})(\d)/,"$1.$2") //Coloca ponto entre o segundo e o terceiro dígitos
v=v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3") //Coloca ponto entre o quinto e o sexto dígitos
v=v.replace(/\.(\d{3})(\d)/,".$1/$2") //Coloca uma barra entre o oitavo e o nono dígitos
v=v.replace(/(\d{4})(\d)/,"$1-$2") //Coloca um hífen depois do bloco de quatro dígitos
return v
}

function romanos(v){
v=v.toUpperCase() //Maiúsculas
v=v.replace(/[^IVXLCDM]/g,"") //Remove tudo o que não for I, V, X, L, C, D ou M
//Essa é complicada! Copiei daqui: http://www.diveintopython.org/refactoring/refactoring.html
while(v.replace(/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"")!="")
v=v.replace(/.$/,"")
return v
}

function data(v){
v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/(\d{2})(\d)/,"$1-$2") //Coloca um ponto entre o segundo e o terceiro dígitos
v=v.replace(/(\d{2})(\d)/,"$1-$2") //Coloca um ponto entre o quarto e o quinto dígitos
//v=v.replace(/^[0-3]?\d\/[01]?\d\/(\d{2}|\d{4})$/)
v=v.replace(/^((0[1-9]|[12]\d)\-(0[1-9]|1[0-2])|30\-(0[13-9]|1[0-2])|31\-(0[13578]|1[02]))\-\d{4}$/)
//v=v.replace(/^(0[1-9]|[012][0-9]|3[01])/\-(0[1-9]|1[012])/\-([12][0-9]{3})/,"") 
return v
}


function hora(v){
//v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/(\d{2})(\d)/,"$1:$2") //Coloca dois ponto entre o segundo e o terceiro dígitos
v=v.replace( (/[012][0-9]:[0-5][0-9]/), "")
//if v.teste( (/[012][0-9]:[0-5][0-9]/);"certo";"errado")
return v
}

function site(v){
//Esse sem comentarios para que você entenda sozinho;-)
v=v.replace(/^http:\/\/?/,"")
dominio=v
caminho=""
if(v.indexOf("/")>-1)
dominio=v.split("/")[0]
caminho=v.replace(/[^\/]*/,"")
dominio=dominio.replace(/[^\w\.\+-:@]/g,"")
caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"")
caminho=caminho.replace(/([\?&])=/,"$1")
if(caminho!="")dominio=dominio.replace(/\.+$/,"")
v="http://"+dominio+caminho
return v
}

</script>

</head>

<body>
<p><font size="5"><strong><font face="Verdana, Arial, Helvetica, sans-serif">Validador de campos de formularios</font></strong></font></p>
<table width="54%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="33%"><div align="left">Letras: </div></td>
<td width="67%"><input name="letras" type="text" id="letras" onkeypress="mascara(this,soLetras)"></td>
</tr>
<tr>
<td><div align="left">Letras Maiusculas: </div>
</td>
<td><input name="letrasMA" type="text" id="letrasMA" onkeypress="mascara(this,soLetrasMA)" >
</td>
</tr>
<tr>
<td><div align="left">Letras Minusculas: </div>
</td>
<td><input name="letrasMI" type="text" id="letrasMI" onkeypress="mascara(this,soLetrasMI)" >
</td>
</tr>
<tr>
<td><div align="left">Números: </div></td>
<td><input name="numeros" type="text" id="numeros" onkeypress="mascara(this,soNumeros)" ></td>
</tr>
<tr>
<td><div align="left">Telefone: </div></td>
<td><input name="tel" id="tel" onkeypress="mascara(this,telefone)" maxlength="14" ></td>
</tr>
<tr>
<td><div align="left">Cpf: </div></td>
<td><input name="cpf" id="cpf" onkeypress="mascara(this,cpf)" maxlength="14" >
ainda não testa digito</td>
</tr>
<tr>
<td height="24"><div align="left">Cep: </div></td>
<td><input name="cep" id="cep" onkeypress="mascara(this,cep)" maxlength="9" ></td>
</tr>
<tr>
<td><div align="left">Cnpj: </div></td>
<td><input name="cnpj" id="cnpj" onkeypress="mascara(this,cnpj)" maxlength="18" >
ainda não testa digito</td>
</tr>
<tr>
<td><div align="left">Romanos: </div></td>
<td><input name="romanos" id="romanos" onkeypress="mascara(this,romanos)" maxlength="18" ></td>
</tr>
<tr>
<td><div align="left">Data: </div>
</td>
<td><input name="data" id="data2" onkeypress="mascara(this,data)" maxlength="10" />
só formatação ainda</td>
</tr>
<tr>
<td><div align="left">Hora: </div>
</td>
<td><input name="hora" id="hora" onkeypress="mascara(this,hora)" maxlength="5" >
aqui esta o problema
</td>
</tr>
</table>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Bom, no campo de horas você usa esse código:

v=v.replace( (/[012][0-9]:[0-5][0-9]/), "")
Percebe que você usa o replace para substituir a ER correta por nada? você pode ver se o conteúdo combina com o match nessa última linha de código:
if( v.match( (/[012][0-9]:[0-5][0-9]/) ) )
return v
return v.replace( (/[012][0-9]:[0-5][0-9]/), "")
Eu pensei nessa forma porque eu ainda não sou muito fera em ER, então meu código sempre fica maior do que o necessário. Se quiser diminuir ainda mais, tente ver como fazer a negação disso: (/[012][0-9]:[0-5][0-9]/) Para só aí usar o replace da forma que usou. Andou lendo os artigos do Elcio né danado rsrsrs. Eu conheço essas funções de algum lugar... Boa sorte. Kelabrasssssssss Edit Eu percebi que as suas horas ainda estavam feito de forma errada, elas atingiam até 29:59, ao invés de substituir a última linha do jeito que eu tinha falado, substitua por isso:
v.match( (/[01][0-9]:[0-5][0-9]|[2][0-4]:[0-5][0-9]/))?v=v:v=''

Ainda usando o match porque não sei usar a negação de tudo isso.

Editado por KaKarotto
Link para o comentário
Compartilhar em outros sites

  • 0
Bom, no campo de horas você usa esse código:

v=v.replace( (/[012][0-9]:[0-5][0-9]/), "")
Percebe que você usa o replace para substituir a ER correta por nada? você pode ver se o conteúdo combina com o match nessa última linha de código:
if( v.match( (/[012][0-9]:[0-5][0-9]/) ) )
return v
return v.replace( (/[012][0-9]:[0-5][0-9]/), "")
Eu pensei nessa forma porque eu ainda não sou muito fera em ER, então meu código sempre fica maior do que o necessário. Se quiser diminuir ainda mais, tente ver como fazer a negação disso: (/[012][0-9]:[0-5][0-9]/) Para só aí usar o replace da forma que usou. Andou lendo os artigos do Elcio né danado rsrsrs. Eu conheço essas funções de algum lugar... Boa sorte. Kelabrasssssssss Edit Eu percebi que as suas horas ainda estavam feito de forma errada, elas atingiam até 29:59, ao invés de substituir a última linha do jeito que eu tinha falado, substitua por isso:
v.match( (/[01][0-9]:[0-5][0-9]|[2][0-4]:[0-5][0-9]/))?v=v:v=''

Ainda usando o match porque não sei usar a negação de tudo isso.

Link para o comentário
Compartilhar em outros sites

  • 0

KaKarotto

obrigado pela contribuição, porém ainda não conseguir fazer a validação funcionar. O código foi derivado de pesquisas realizadas na internet, mas não encontrei os artigos do Elcio, talvez ache a solução por lá, se você tiver algum link agradeça tb.

faros

Link para o comentário
Compartilhar em outros sites

  • 0

Ué....o que deu errado na validação da hora ???

Que hora você colocou que não validou direito? Posta aqui por favor.

O endereço do Elcio onde estão a maior parte das funções que usou é esse:

http://elcio.com.br/ajax/mascara/

Kelabrassssss

Editado por KaKarotto
Link para o comentário
Compartilhar em outros sites

  • 0

Visitei o link de Elcio e indiscutivelmente o código foi originado de lá, porém não conseguir informações para resolver o problema. Pesquisando um pouco mais achei um Guia de Consulta Rápida sobre Expressões Regulares de Aurélio Marinho Jargas (vamos dar os créditos), onde encontrei “um luz” para solução da validação das horas (segue code). Vou trabalhar no campo de datas e se possível na validação dos dígitos verificadores de CPF e CNPJ, quando estiver tudo pronto publico o código na integra. Valeu....

function hora(v){
v=v.replace(/\D/g,"") //Remove tudo o que não é dígito
v=v.replace(/(\d{2})(\d)/,"$1:$2") //Coloca dois ponto entre o segundo e o terceiro dígitos
v=v.replace( (/^([^0-2]|([0-1][^0-9]|2[^0-3])|([0-1][0-9]|2[0-3]):[^0-5]|([0-1][0-9]|2[0-3]):[0-5][^0-9])/),"")//valida horas
return v
}

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...