Foros del Web » Programando para Internet » Javascript »

Expresion Regular Telefonos

Estas en el tema de Expresion Regular Telefonos en el foro de Javascript en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 19/03/2008, 09:54
 
Fecha de Ingreso: septiembre-2006
Mensajes: 28
Antigüedad: 17 años, 7 meses
Puntos: 0
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>
  #2 (permalink)  
Antiguo 19/03/2008, 19:46
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
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
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 23/03/2008, 01:56
 
Fecha de Ingreso: septiembre-2006
Mensajes: 28
Antigüedad: 17 años, 7 meses
Puntos: 0
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/03/2008 a las 02:09
  #4 (permalink)  
Antiguo 23/03/2008, 09:57
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
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...
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 24/03/2008, 17:11
 
Fecha de Ingreso: septiembre-2006
Mensajes: 28
Antigüedad: 17 años, 7 meses
Puntos: 0
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))">
  #6 (permalink)  
Antiguo 25/03/2008, 09:12
 
Fecha de Ingreso: septiembre-2006
Mensajes: 28
Antigüedad: 17 años, 7 meses
Puntos: 0
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);">
  #7 (permalink)  
Antiguo 25/03/2008, 10:32
 
Fecha de Ingreso: septiembre-2006
Mensajes: 28
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Expresion Regular Telefonos

Hola, espero me puedas ayudar...
  #8 (permalink)  
Antiguo 25/03/2008, 12:36
Avatar de marcopoloaz06  
Fecha de Ingreso: julio-2007
Ubicación: México
Mensajes: 457
Antigüedad: 16 años, 9 meses
Puntos: 11
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..
__________________
Aerolíneas Alicia :D
  #9 (permalink)  
Antiguo 25/03/2008, 15:00
 
Fecha de Ingreso: septiembre-2006
Mensajes: 28
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Expresion Regular Telefonos

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

Gracias..por tu colaboración

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:20.