Cómo formatear un número de teléfono con jQuery


93

Actualmente estoy mostrando números de teléfono como 2124771000. Sin embargo, necesito el número a ser formateado en una forma más legible, por ejemplo: 212-477-1000. Aquí está mi corriente HTML:

<p class="phone">2124771000</p>

1
Respuesta demasiado tarde, pero solo para ayudar a aquellos que aterrizan en esta URL de página: igorescobar.github.io/jQuery-Mask-Plugin
— Senthil

5
No estoy seguro de entender el estado cerrado de este. Not Constructive no parece correcto ... Encuentro esta información extremadamente útil y una asociación directa con el problema que me trajo aquí. No impugno el hecho de que está cerrado, sino la razón mostrada para estar cerrado
— Brett Weber

Quizás la pregunta fue editada y era menos descriptiva antes ... me parece una pregunta y respuesta SO perfectamente válida, y muchos votos a favor.
— Kevin Nelson

1
Biblioteca de Google github.com/googlei18n/libphonenumber no se requiere jQuery.
— nu Everest

Respuestas:


217

Simple: http://jsfiddle.net/Xxk3F/3/

$('.phone').text(function(i, text) {
    return text.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
});

O: http://jsfiddle.net/Xxk3F/1/

$('.phone').text(function(i, text) {
    return text.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, '$1-$2-$3');
});

Nota: El método .text () no se puede utilizar en elementos de entrada. Para ingresar texto de campo, use el método .val ().


4
Modifiqué esto para admitir eventos de 'cambio' dentro de los campos de entrada. jsfiddle.net/gUsUK
— Zach Shallbetter

3
Un poco más robusto de una expresión regular (aunque requiere una función de reemplazo personalizada) sería /(\d{3})?(\d{3})(\d{4})$/en caso de que no haya un código de área
— RevanProdigalKnight

¿Es válido para números de teléfono de todo el mundo?
— RamPrasadBismil

Si tiene varios números de teléfono en la página, considere usar la función $ (selector) .each () para aplicar fácilmente esta máscara a todos los números.
— Daniel Siebert

Quiero implementarlo con pulsación de tecla y evento de desenfoque. No está formateando el número de teléfono cuando los dígitos son inferiores a 10. El código de muestra es: $('#x_phone').on('keypress blur',function() { var ph = $(this).val(); var temp = ph.replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3'); $(this).val(temp); //alert(temp); });
— Musaddiq Khan

54
var phone = '2124771000',
    formatted = phone.substr(0, 3) + '-' + phone.substr(3, 3) + '-' + phone.substr(6,4)

7
@AndreasAL: Porque un motor de expresiones regulares tiene una sobrecarga pesada, especialmente para algo donde se conoce el formato de entrada y las operaciones de cadena simples son MUCHO más eficientes. Y, por supuesto, existe la regla de que usar una expresión regular para un problema solo te hace tener dos problemas.
— Marc B

4
Esta solución también formatea correctamente los números de teléfono con letras, como "212555IDEA".
— Jason Whitehorn

1
esto funciona bien en el entorno de Windows pero no en el dispositivo iOS. ¿Hay alguna alternativa que funcione en ambas plataformas
— Purushotam Sharma

12

No olvide asegurarse de trabajar con números enteros.

var separator = '-';
$( ".phone" ).text( function( i, DATA ) {
    DATA
        .replace( /[^\d]/g, '' )
        .replace( /(\d{3})(\d{3})(\d{4})/, '$1' + separator + '$2' + separator + '$3' );
    return DATA;
});

8

Aquí hay una combinación de algunas de estas respuestas. Esto se puede utilizar para campos de entrada. Se trata de números de teléfono de 7 y 10 dígitos.

// Used to format phone number
function phoneFormatter() {
  $('.phone').on('input', function() {
    var number = $(this).val().replace(/[^\d]/g, '')
    if (number.length == 7) {
      number = number.replace(/(\d{3})(\d{4})/, "$1-$2");
    } else if (number.length == 10) {
      number = number.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
    }
    $(this).val(number)
  });
}

Ejemplo en vivo: JSFiddle

Sé que esto no responde directamente a la pregunta, pero cuando estaba buscando respuestas, esta fue una de las primeras páginas que encontré. Entonces, esta respuesta es para cualquiera que busque algo similar a lo que yo estaba buscando.


5

Utilice una biblioteca para manejar el número de teléfono. Libphonenumber de Google es su mejor opción .

// Require `PhoneNumberFormat`.
var PNF = require('google-libphonenumber').PhoneNumberFormat;

// Get an instance of `PhoneNumberUtil`.
var phoneUtil = require('google-libphonenumber').PhoneNumberUtil.getInstance();

// Parse number with country code.
var phoneNumber = phoneUtil.parse('202-456-1414', 'US');

// Print number in the international format.
console.log(phoneUtil.format(phoneNumber, PNF.INTERNATIONAL));
// => +1 202-456-1414

Recomiendo usar este paquete de seegno.


4

Le proporcioné el enlace jsfiddle para que formatee los números de teléfono de EE. UU. Como (XXX) XXX-XXX

 $('.class-name').on('keypress', function(e) {
  var key = e.charCode || e.keyCode || 0;
  var phone = $(this);
  if (phone.val().length === 0) {
    phone.val(phone.val() + '(');
  }
  // Auto-format- do not expose the mask as the user begins to type
  if (key !== 8 && key !== 9) {
    if (phone.val().length === 4) {
      phone.val(phone.val() + ')');
    }
    if (phone.val().length === 5) {
      phone.val(phone.val() + ' ');
    }
    if (phone.val().length === 9) {
      phone.val(phone.val() + '-');
    }
    if (phone.val().length >= 14) {
      phone.val(phone.val().slice(0, 13));
    }
  }

  // Allow numeric (and tab, backspace, delete) keys only
  return (key == 8 ||
    key == 9 ||
    key == 46 ||
    (key >= 48 && key <= 57) ||
    (key >= 96 && key <= 105));
})

.on('focus', function() {
  phone = $(this);

  if (phone.val().length === 0) {
    phone.val('(');
  } else {
    var val = phone.val();
    phone.val('').val(val); // Ensure cursor remains at the end
  }
})

.on('blur', function() {
  $phone = $(this);

  if ($phone.val() === '(') {
    $phone.val('');
  }
});

Ejemplo en vivo: JSFiddle


¿Cómo puedo cambiar este patrón para mostrar el número de izquierda a derecha como ==> (021) 88888888
— Mostafa

3

prueba algo como esto ...

jQuery.validator.addMethod("phoneValidate", function(number, element) {
    number = number.replace(/\s+/g, ""); 
    return this.optional(element) || number.length > 9 &&
        number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");

$("#myform").validate({
  rules: {
    field: {
      required: true,
      phoneValidate: true
    }
  }
});

2

Considere libphonenumber-js ( https://github.com/halt-hammerzeit/libphonenumber-js ) que es una versión más pequeña del famoso y completo libphonenumber.

Ejemplo rápido y sucio:

$(".phone-format").keyup(function() {
// Don't reformat backspace/delete so correcting mistakes is easier
if (event.keyCode != 46 && event.keyCode != 8) {
    var val_old = $(this).val();
    var newString = new libphonenumber.asYouType('US').input(val_old);
    $(this).focus().val('').val(newString);
}
});

(Si usa una expresión regular para evitar la descarga de una biblioteca, evite reformatear en retroceso / eliminar para que sea más fácil corregir errores tipográficos).


2

Una solución alternativa:

function numberWithSpaces(value, pattern) {
  var i = 0,
    phone = value.toString();
  return pattern.replace(/#/g, _ => phone[i++]);
}

console.log(numberWithSpaces('2124771000', '###-###-####'));


1

Encontré esta pregunta mientras buscaba en Google una forma de formatear automáticamente números de teléfono a través de un complemento de jQuery. La respuesta aceptada no fue ideal para mis necesidades y han pasado muchas cosas en los 6 años desde que se publicó originalmente. Finalmente encontré la solución y la estoy documentando aquí para la posteridad.

Problema

Me gustaría que el campo de entrada html de mi número de teléfono formatee automáticamente (enmascare) el valor a medida que el usuario escribe.

Solución

Consulte Cleave.js . Es una manera muy poderosa / flexible y fácil de resolver este problema y muchos otros problemas de enmascaramiento de datos.

Dar formato a un número de teléfono es tan fácil como:

var cleave = new Cleave('.input-element', {
    phone: true,
    phoneRegionCode: 'US'
});

1

Entrada:

4546644645

Código:

PhoneNumber = Input.replace(/(\d\d\d)(\d\d\d)(\d\d\d\d)/, "($1)$2-$3");

Salida:

(454)664-4645

0
 $(".phoneString").text(function(i, text) {
            text = text.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
            return text;
        });

Salida :-( 123) 657-8963


-2

tal vez esto ayude

var countryCode = +91;
var phone=1234567890;
phone=phone.split('').reverse().join('');//0987654321
var formatPhone=phone.substring(0,4)+'-';//0987-
phone=phone.replace(phone.substring(0,4),'');//654321
while(phone.length>0){
formatPhone=formatPhone+phone.substring(0,3)+'-';
phone=phone.replace(phone.substring(0,3),'');
}
formatPhone=countryCode+formatPhone.split('').reverse().join('');

obtendrá + 91-123-456-7890

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.