Retroceder   Foros del Web > Programación para sitios web > Javascript

Respuesta
 
Herramientas Desplegado
Antiguo 19-mar-2008, 09:54   #1 (permalink)
koringo ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 27
Expresion Regular Telefonos

Hola buen día, tengo una función actualmente que mientras se escribe valida un formato (patrón) por ej: 123-45-67 y llega hasta ahí...y lo hace bien, he intentado modificar el código para que reciba estos formatos
123-45-67 (teléfono de 7 dígitos)
(123)-456-78-90 (teléfono celular 10 dígitos)
(012)-345-67-89-(0123) (telefono de 7 digitos pero con codigo de area y extensión)

(claro no requiero que funcione con paréntesis es solo para ilustrar el ejemplo).

Me ha sido complicado hacerlo, he aquí el código por si alguien le interesa
funciona con estos formato 123-45-67 y 123-456-78-90

en caso de que también les sea difícil hacerlo, Si me pueden colaborar con las expresiones regulares que me permitan solucionar este problema por el momento.

Gracias.


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<meta name="author" content="Wilmar">

<title>Untitled 2</title>
<script type="text/javascript">
var patron = new Array(3,2,2);
var patron2 = new Array(3,3,2,2);
function ValidarFormatoTelefono(objeto,sep,pat,numeros){
if(objeto.valant != objeto.value){
valor = objeto.value // valor del objeto
largo = valor.length // tamaño del objeto
valor = valor.split(sep) // toma el valor y lo va separando
valor2 = ''
for(r=0;r<valor.length;r++){
valor2 += valor[r] // valor2 es un array auxiliar que contiene la cadena
}
if(numeros){ // Si el parametro es true, evaluar la ocurrencia de
for(z=0;z<valor2.length;z++){ // una letra y con valor2.replace la elimina mientras
if(isNaN(valor2.charAt(z))){ // escribe
letra = new RegExp(valor2.charAt(z),"g")
valor2 = valor2.replace(letra,"")
}
}
}//Fin if(numeros)
valor = ''
valor3 = new Array()
for(s=0; s<pat.length; s++){ // aqui se genera la cadena segun el patron
valor3[s] = valor2.substring(0,pat[s]) // y cada vez que se digita un numero evalua
valor2 = valor2.substr(pat[s]) // la posicion y comienza darle formato
}
for(q=0;q<valor3.length; q++){
if(q ==0){
valor = valor3[q]
}
else{
if(valor3[q] != ""){
valor += sep + valor3[q] //aqui ya termina de hacer el formato 999-99-99
}
}
}
objeto.value = valor
objeto.valant = valor
}//Fin if(objeto.valant != d.value)
}

</script>
</head>
<body>

<input name="txtTelefono" value="" onkeyup="ValidarFormatoTelefono(this,'-',patron,true);">
<br>
<br>
<input name="txtTelefono" value="" onkeyup="ValidarFormatoTelefono(this,'-',patron2,true);">

</body>
</html>
koringo está desconectado   Responder Citando
Antiguo 19-mar-2008, 19:46   #2 (permalink)
Colaborador
derkenuke llegará a ser famoso muy prontoderkenuke llegará a ser famoso muy prontoderkenuke llegará a ser famoso muy pronto
 
Avatar de derkenuke
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.446
Re: Expresion Regular Telefonos

Hola koringo:

Es una expresión regular sencilla, basta con saber el número de caracteres numéricos y luego adjuntarle un guión al final. Ese bloque lo repites las veces que necesites:
Código:
\d{3}-\d{2}-\d{7}-\d
// Encajaría con 123-12-1234567-1, por ejemplo
Sólo tienes que modificar la estructura a tu gusto.


Saludos
__________________
Inténtalo y búscalo siempre antes de preguntarlo
derkenuke está desconectado   Responder Citando
Antiguo 23-mar-2008, 01:56   #3 (permalink)
koringo ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 27
De acuerdo Re: Expresion Regular Telefonos

Hola, muchas gracias por tu aporte, me ha servido.

Ahora me inquietud es implementar la funcion que tengo aqui para poder hacerla mas dinamica, la verdad le he cacharreado bastante pero me sale un error que no se como solucionarlo...espero me puedas dar alguna idea mejor ya que necesito esto...

Me explico: La funcion ValidarFormatoTelefono, recibe un patron por ej (3,2,2) q indica que si digitas 123-45-67 es un telefono que formatea mientras va escribiendo, pero mi gran necesidad es que aldigitar cualquier tipo de telefono, esta funcion la identifique y despues de cambiar el foco cambiar el formato adecuado si esposible....con los ejemplos que te di arriba

Muchas gracias por tu colaboracion y ayuda

Última edición por koringo; 23-mar-2008 a las 02:09.
koringo está desconectado   Responder Citando
Antiguo 23-mar-2008, 09:57   #4 (permalink)
Colaborador
derkenuke llegará a ser famoso muy prontoderkenuke llegará a ser famoso muy prontoderkenuke llegará a ser famoso muy pronto
 
Avatar de derkenuke
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.446
Re: Expresion Regular Telefonos

Hola de nuevo:

Vamos a ver si lo he entendido bien. Quieres que el usuario escriba un telefono cualquiera en cualquier formato. Mientras lo va escribiendo quieres que se formatee en un formato que tú ya has predefinido ¿no?

No sé si he captado bien la idea...
__________________
Inténtalo y búscalo siempre antes de preguntarlo
derkenuke está desconectado   Responder Citando
Antiguo 24-mar-2008, 17:11   #5 (permalink)
koringo ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 27
De acuerdo Re: Expresion Regular Telefonos

Mira me inspire en este codigo, ya que este lo que hace es colocarle punto de MIL es decir si escribes 1500000 te queda 1.500.000 y bueno para lo de los telefono es como similar pero toca en algun lado decirle que tipo de formato se necesita segun va digitando el usuario....he comenzado a modificar el codigo de arriba que mostre primero y funciona, pero no muy bien....espero me puedas entender lo que pienso...y gracias por tu colaboracion................

Aver un ejemplo si de antemanno se que tengo tres formatos telefonicos a dar formato por decirte algo asi quiero un formato asi 999-99-99 otro asi 999-999-99-99 y otro asi 99-999-99-99, mas o menos lo he pensado asi si el usuario digita 9999999 ahi cumple para un formato pero si continua insertando datos deberia de ser capaz de hacerlo con los q cumpla....espero ser claro y mil gracias de nuevo

<script language="JavaScript">
//Código para colocar
//los indicadores de miles mientras se escribe
//script por tunait!
function puntitos(donde,caracter){
pat = /[\*,\+,\(,\),\?,\,$,\[,\],\^]/
valor = donde.value
largo = valor.length
crtr = true
if(isNaN(caracter) || pat.test(caracter) == true){
if (pat.test(caracter)==true){
caracter = "\" + caracter
}
carcter = new RegExp(caracter,"g")
valor = valor.replace(carcter,"")
donde.value = valor
crtr = false
}
else{
var nums = new Array()
cont = 0
for(m=0;m<largo;m++){
if(valor.charAt(m) == "." || valor.charAt(m) == " ")
{continue;}
else{
nums[cont] = valor.charAt(m)
cont++
}
}
}
var cad1="",cad2="",tres=0
if(largo > 3 && crtr == true){
for (k=nums.length-1;k>=0;k--){
cad1 = nums[k]
cad2 = cad1 + cad2
tres++
if((tres%3) == 0){
if(k!=0){
cad2 = "." + cad2
}
}
}
donde.value = cad2
}
}
</script>

Y el campo de texto:

<input type="text" name="pepe" onkeyup = "puntitos(this,this.value.charAt(this.value.le ngth-1))">
koringo está desconectado   Responder Citando
Antiguo 25-mar-2008, 09:12   #6 (permalink)
koringo ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 27
Pregunta Re: Expresion Regular Telefonos

Mira he aqui el codigo que he resuelto hasta ahora
observa que cuando pierdo el foco la funcion evalua que tipo es si es de 7 0 9 digitos y listo, pero me surge un gran problema nuevamente......

resulta que tengo varios formatos por ejemplo el de nueve digitos
que es un patron de var pat = new Array(2,3,2,2);que cumple para
99-999-99-99 pero se puede dar esto 9-999-99-99 que tambien es valido
ya no seria de 9 sino de 8 entonces tocaria crear una opcion para esto,
resulta que comence a observar esto y tengo patrones que pueden ser mas o menos digitos de los acostumbrados para dar el formato, y la verdad ya no que hacer para esto, debido a que este codigo se volveria gigantesto estoy pensando en volverlo mas dinamico espero me dar alguna idea al respecto y gracias.


<input name="txtTelefono" value="" onblur="ValidarFormatoTelefono(this,'-',true);">

function ValidarFormatoTelefono(objeto,sep,numeros){
if(objeto.value){
valor = objeto.value
largo = valor.length
valor = valor.split(sep)
valor2 = ''

for(r=0;r<valor.length;r++){
valor2 += valor[r]
}
if ((numeros)){
for(z=0;z<valor2.length;z++){
if(isNaN(valor2.charAt(z))){
letra = new RegExp(valor2.charAt(z),"g")
valor2 = valor2.replace(letra,"")
}
}
}//Fin if(numeros)

switch(largo){
case 7: //telefono normal
valor = ''
valor3 = new Array()
//var re1 = /^\d{3}\D?\d{2}\D?\d{2}$/
var pat = new Array(3,2,2);

for(s=0; s<pat.length; s++){
valor3[s] = valor2.substring(0,pat[s])
valor2 = valor2.substr(pat[s])
}
for(q=0;q<valor3.length; q++){
if(q ==0){
valor = valor3[q]

}
else{
if(valor3[q] != ""){
valor += sep + valor3[q]
}
}
}
break
case 9:
//telefono con indicativo
//var re6 = /\D*\d{1,2}\D*\d{3}\D?\d{2}\D?\d{2}$/
//telefono solo con indicativo 99-999-99-99
valor = ''
valor3 = new Array()
var pat = new Array(2,3,2,2);
for(s=0; s<pat.length; s++){
valor3[s] = valor2.substring(0,pat[s])
valor2 = valor2.substr(pat[s])
}
for(q=0;q<valor3.length; q++){
if(q ==0){
valor = valor3[q]

}
else{
if(valor3[q] != ""){
valor += sep + valor3[q]
}
}
}
break


default:
valor=valor.slice(0,(valor.length-1));
alert('Formato Telefonico No Valido');
// objeto.value="";


}
objeto.value = valor;
}
}

<input name="txtTelefono" value="" onblur="ValidarFormatoTelefono(this,'-',true);">
koringo está desconectado   Responder Citando
Antiguo 25-mar-2008, 10:32   #7 (permalink)
koringo ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 27
Re: Expresion Regular Telefonos

Hola, espero me puedas ayudar...
koringo está desconectado   Responder Citando
Antiguo 25-mar-2008, 12:36   #8 (permalink)
marcopoloaz06 ha deshabilitado el karma
 
Avatar de marcopoloaz06
 
Fecha de Ingreso: julio-2007
Ubicación: Metro Neza,Edo.Méx
Mensajes: 263
Enviar un mensaje por MSN a marcopoloaz06
Sonrisa Re: Expresion Regular Telefonos

Hola, ps no se que quieras solucionar pero ps aver si esto te da una solución.
Código HTML:
<script type="text/javascript">
function Valida(th,sep){

var v=th.value,vl=v.length;

if(/^\d+\d+\d$/.test(v)!=true || vl>10)return false;

var fncExp=function(a){
 var t="";
 for(k in a)t+="(\\d{"+ a[k] +"})";
return new RegExp(t);
}

switch(vl){
 case 7:
 th.value=v.replace(fncExp([3,2,2]),"$1"+ sep +"$2"+ sep +"$3");
 break;
 case 9:
 th.value=v.replace(fncExp([2,3,2,2]),"$1"+ sep +"$2"+ sep +"$3"+ sep +"$4");
 break;
 case 10:
 th.value=v.replace(fncExp([3,3,2,2]),"$1"+ sep +"$2"+ sep +"$3"+ sep +"$4");
 break;
 default:
alert("ERROR");
th.value="";
 break;
}

}
</script>
---------------------------
<input name="txtTelefono" value="" onblur="Valida(this,'-');" />
bueno te cuidas
Adios..
__________________
Cambia IP Prodigy Auto/Manual/autoBot Un script Greasemonkey bY->marcoPOLO
http://userscripts.org/scripts/show/20617
http://antiemoerickramon.6te.net
marcopoloaz06 está desconectado   Responder Citando
Antiguo 25-mar-2008, 15:00   #9 (permalink)
koringo ha deshabilitado el karma
 
Fecha de Ingreso: septiembre-2006
Mensajes: 27
Alegría Re: Expresion Regular Telefonos

Muchas gracias......
La verdad tu código es bastante bueno y excelente......

Gracias..por tu colaboración

koringo está desconectado   Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 5,00 de promedio.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 05:22.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93