So formatieren Sie eine Telefonnummer mit jQuery

93

Ich zeige derzeit Telefonnummern wie 2124771000. Ich muss die Nummer jedoch in einer besser lesbaren Form formatieren, zum Beispiel : 212-477-1000. Hier ist meine aktuelle HTML:

<p class="phone">2124771000</p>
Xtian
quelle
1
Zu späte Antwort, aber nur um denjenigen zu helfen, die auf dieser Seite landen URL: igorescobar.github.io/jQuery-Mask-Plugin
Senthil
5
Ich bin mir nicht sicher, ob ich den geschlossenen Status in diesem Fall verstehe. Nicht konstruktiv scheint nicht richtig zu sein ... Ich finde diese Informationen äußerst nützlich und eine direkte Verbindung zu dem Thema, das mich hierher gebracht hat. Ich bestreite nicht die Tatsache, dass es geschlossen ist, sondern den angezeigten Grund für die Schließung
Brett Weber
Vielleicht wurde die Frage bearbeitet und war vorher weniger beschreibend ... es scheint mir eine vollkommen gültige SO-Frage und Antwort zu sein, und viele positive Stimmen.
Kevin Nelson
1
Googles-Bibliothek github.com/googlei18n/libphonenumber keine jQuery erforderlich.
Nu Everest

Antworten:

217

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

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

Oder: 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');
});

Hinweis: Die Methode .text () kann nicht für Eingabeelemente verwendet werden. Verwenden Sie für Eingabefeldtext die Methode .val ().

andlrc
quelle
4
Ich habe dies geändert, um Änderungsereignisse in Eingabefeldern zu unterstützen. jsfiddle.net/gUsUK
Zach Shallbetter
3
Ein bisschen robuster von einem regulären Ausdruck (obwohl es eine benutzerdefinierte Ersetzungsfunktion erfordert) wäre, /(\d{3})?(\d{3})(\d{4})$/falls es keine Vorwahl gibt
RevanProdigalKnight
Gilt es für Telefonnummern auf der ganzen Welt?
RamPrasadBismil
Wenn Sie mehrere Telefonnummern auf der Seite haben, können Sie die Funktion $ (Selektor) .each () verwenden, um diese Maske einfach auf alle Nummern anzuwenden.
Daniel Siebert
Ich möchte es mit Tastendruck und Unschärfe implementieren. Die Telefonnummer wird nicht formatiert, wenn die Ziffern kleiner als 10 sind. Beispielcode ist: $('#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)
Marc B.
quelle
7
@AndreasAL: Weil eine Regex-Engine einen hohen Overhead hat, insbesondere für etwas, bei dem das Eingabeformat bekannt ist und einfache Zeichenfolgenoperationen weitaus effizienter sind. Und natürlich gibt es die Regel, dass die Verwendung eines regulären Ausdrucks für ein Problem nur zwei Probleme verursacht.
Marc B
4
Diese Lösung formatiert auch Telefonnummern mit Buchstaben wie "212555IDEA".
Jason Whitehorn
1
Dies funktioniert gut in Windows-Umgebungen, aber nicht in iOS-Geräten. Gibt es eine Alternative, die auf beiden Plattformen funktioniert
Purushotam Sharma
12

Vergessen Sie nicht sicherzustellen, dass Sie mit reinen ganzen Zahlen arbeiten.

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;
});
Trenton Bost
quelle
8

Hier ist eine Kombination einiger dieser Antworten. Dies kann für Eingabefelder verwendet werden. Beschäftigt sich mit 7- und 10-stelligen Telefonnummern.

// 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)
  });
}

Live-Beispiel: JSFiddle

Ich weiß, dass dies die Frage nicht direkt beantwortet, aber als ich nach Antworten suchte, war dies eine der ersten Seiten, die ich fand. Diese Antwort ist also für alle, die nach etwas suchen, das dem ähnelt, wonach ich gesucht habe.

Cruz Nunez
quelle
5

Verwenden Sie eine Bibliothek, um die Telefonnummer zu verarbeiten. Die Telefonnummer von Google ist die beste Wahl .

// 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

Ich empfehle dieses Paket von seegno zu verwenden.

aloisdg wechselt zu codidact.com
quelle
4

Ich habe einen jsfiddle-Link bereitgestellt, mit dem Sie US-Telefonnummern als (XXX) XXX-XXX formatieren können

 $('.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('');
  }
});

Live-Beispiel: JSFiddle

Kapilrc
quelle
Wie kann ich dieses Muster ändern, um die Nummer von links nach rechts anzuzeigen, wie ==> (021) 88888888
Mostafa
3

versuchen Sie so etwas ..

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
    }
  }
});
Anuj Patel
quelle
2

Betrachten Sie libphonenumber-js ( https://github.com/halt-hammerzeit/libphonenumber-js ), eine kleinere Version der vollständigen und berühmten libphonenumber.

Schnelles und schmutziges Beispiel:

$(".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);
}
});

(Wenn Sie einen regulären Ausdruck verwenden, um einen Bibliotheksdownload zu vermeiden, vermeiden Sie eine Neuformatierung bei Rücktaste / Löschen, um Tippfehler zu korrigieren.)

Adam Lane
quelle
2

Eine alternative Lösung:

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

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

Penny Liu
quelle
1

Ich habe diese Frage gefunden, als ich nach einer Möglichkeit gegoogelt habe, Telefonnummern über ein jQuery-Plugin automatisch zu formatieren. Die akzeptierte Antwort war nicht ideal für meine Bedürfnisse und in den 6 Jahren seit ihrer Veröffentlichung wurde viel passiert. Ich habe schließlich die Lösung gefunden und dokumentiere sie hier für die Nachwelt.

Problem

Ich möchte, dass mein HTML-Eingabefeld für die Telefonnummer den Wert automatisch formatiert (maskiert), während der Benutzer ihn eingibt.

Lösung

Schauen Sie sich Cleave.js an . Es ist eine sehr leistungsfähige / flexible und einfache Möglichkeit, dieses Problem und viele andere Datenmaskierungsprobleme zu lösen.

Das Formatieren einer Telefonnummer ist so einfach wie:

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

Eingang:

4546644645

Code:

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

Ausgabe:

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

Ausgabe :-( 123) 657-8963

Nirali
quelle
-2

Vielleicht hilft das

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('');

Sie erhalten + 91-123-456-7890

user6560624
quelle