web-dev-qa-db-de.com

Regulärer Ausdruck, um eine US-Telefonnummer in Javascript zu formatieren

Ich freue mich darauf, eine Telefonnummer für die Anzeige in Javascript neu zu formatieren (zu ersetzen, nicht zu validieren - es gibt viele Referenzen zum Validieren) Hier ein Beispiel für einige Daten:

  • 123 4567890
  • (123) 456–7890
  • (123)456-7890
  • 123 456 7890
  • 123.456.7890
  • (leer/null)
  • 1234567890

Gibt es eine einfache Möglichkeit, einen regulären Ausdruck dafür zu verwenden? Ich suche den besten Weg, dies zu tun. Gibt es einen besseren Weg?

Ich möchte die Nummer folgendermaßen formatieren: (123) 456-7890

44
Matt K

Angenommen, Sie möchten das Format "(123) 456-7890":

function formatPhoneNumber(phoneNumberString) {
  var cleaned = ('' + phoneNumberString).replace(/\D/g, '')
  var match = cleaned.match(/^(\d{3})(\d{3})(\d{4})$/)
  if (match) {
    return '(' + match[1] + ') ' + match[2] + '-' + match[3]
  }
  return null
}

Hier ist eine Version, die den optionalen +1 internationalen Code erlaubt:

function formatPhoneNumber(phoneNumberString) {
  var cleaned = ('' + phoneNumberString).replace(/\D/g, '')
  var match = cleaned.match(/^(1|)?(\d{3})(\d{3})(\d{4})$/)
  if (match) {
    var intlCode = (match[1] ? '+1 ' : '')
    return [intlCode, '(', match[2], ') ', match[3], '-', match[4]].join('')
  }
  return null
}
formatPhoneNumber('+12345678900') // => "+1 (234) 567-8900"
formatPhoneNumber('2345678900')   // => "(234) 567-8900"
115
maerics

Mögliche Lösung:

function normalize(phone) {
    //normalize string and remove all unnecessary characters
    phone = phone.replace(/[^\d]/g, "");

    //check if number length equals to 10
    if (phone.length == 10) {
        //reformat and return phone number
        return phone.replace(/(\d{3})(\d{3})(\d{4})/, "($1) $2-$3");
    }

    return null;
}

var phone = '(123)4567890';
phone = normalize(phone); //(123) 456-7890
23
ioseb
var x = '301.474.4062';

x = x.replace(/\D+/g, '')
     .replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');

Arbeitsbeispiel hier .

17
Sean Bright

Ich verwende diese Funktion, um US-Nummern zu formatieren. 

function formatUsPhone(phone) {

    var phoneTest = new RegExp(/^((\+1)|1)? ?\(?(\d{3})\)?[ .-]?(\d{3})[ .-]?(\d{4})( ?(ext\.? ?|x)(\d*))?$/);

    phone = phone.trim();
    var results = phoneTest.exec(phone);
    if (results !== null && results.length > 8) {

        return "(" + results[3] + ") " + results[4] + "-" + results[5] + (typeof results[8] !== "undefined" ? " x" + results[8] : "");

    }
    else {
         return phone;
    }
}

Es akzeptiert fast alle vorstellbaren Schreibweisen für eine US-Telefonnummer. Das Ergebnis wird in einer Standardform von (987) 654-3210 x123 formatiert

4
mikryz
var numbers = "(123) 456-7890".replace(/[^\d]/g, ""); //This strips all characters that aren't digits
if (numbers.length != 10) //wrong format
    //handle error
var phone = "(" + numbers.substr(0, 3) + ") " + numbers.substr(3, 3) + "-" + numbers.substr(6); //Create format with substrings
1
Alex Turpin

Diese Antwort entlehnt die Antwort der Maerics. Sie unterscheidet sich hauptsächlich dadurch, dass sie teilweise eingegebene Telefonnummern akzeptiert und die eingegebenen Teile formatiert.

phone = value.replace(/\D/g, '');
const match = phone.match(/^(\d{1,3})(\d{0,3})(\d{0,4})$/);
if (match) {
  phone = `${match[1]}${match[2] ? ' ' : ''}${match[2]}${match[3] ? '-' : ''}${match[3]}`;
}
return phone
1
David Baucum

Mit diesen Funktionen können Sie gültige Telefonnummern prüfen und normalisieren:

let formatPhone = (dirtyNumber) => {
 return dirtyNumber.replace(/\D+/g, '').replace(/(\d{3})(\d{3})(\d{4})/, '($1) $2-$3');
}

let isPhone = (phone) => {
   //normalize string and remove all unnecessary characters
   phone = phone.replace(/\D+/g, '');
   return phone.length == 10? true : false;
}

Hier ist eine, die sowohl Telefonnummern als auch Telefonnummern mit Nebenstellen akzeptiert.

function phoneNumber(tel) {
var toString = String(tel),
    phoneNumber = toString.replace(/[^0-9]/g, ""),
    countArrayStr = phoneNumber.split(""),
    numberVar = countArrayStr.length,
    closeStr = countArrayStr.join("");
if (numberVar == 10) {
    var phone = closeStr.replace(/(\d{3})(\d{3})(\d{4})/, "$1.$2.$3"); // Change number symbols here for numbers 10 digits in length. Just change the periods to what ever is needed.
} else if (numberVar > 10) {
    var howMany = closeStr.length,
        subtract = (10 - howMany),
        phoneBeginning = closeStr.slice(0, subtract),
        phoneExtention = closeStr.slice(subtract),
        disX = "x", // Change the extension symbol here
        phoneBeginningReplace = phoneBeginning.replace(/(\d{3})(\d{3})(\d{4})/, "$1.$2.$3"), // Change number symbols here for numbers greater than 10 digits in length. Just change the periods and to what ever is needed. 
        array = [phoneBeginningReplace, disX, phoneExtention],
        afterarray = array.splice(1, 0, " "),
        phone = array.join("");

} else {
    var phone = "invalid number US number";
}
return phone;
}

phoneNumber("1234567891"); // Your phone number here
0
jjones

Für US-Telefonnummern

/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/

Lassen Sie uns diesen regulären Ausdruck in kleinere Fragmente unterteilen, um leicht verständlich zu sein.

  • /^\(?: Bedeutet, dass die Telefonnummer mit einem optionalen ( beginnen kann.
  • (\d{3}): Nach dem optionalen ( müssen 3 Ziffern vorhanden sein. Wenn die Telefonnummer keinen ( hat, muss sie mit 3 Ziffern beginnen. Z.B. (308 oder 308.
  • \)?: Bedeutet, dass die Telefonnummer nach den ersten 3 Ziffern einen optionalen ) haben kann.
  • [- ]?: Als nächstes kann die Telefonnummer nach - einen optionalen Bindestrich ()) haben, falls vorhanden oder nach den ersten 3 Ziffern.
  • (\d{3}): Dann müssen noch 3 numerische Ziffern vorhanden sein. ZB (308)-135 oder 308-135 oder 308135
  • [- ]?: Nach dem zweiten Satz von 3 Ziffern kann die Telefonnummer einen weiteren optionalen Bindestrich (-) enthalten. ZB (308)-135- oder 308-135- oder 308135-
  • (\d{4})$/: Schließlich muss die Telefonnummer mit vier Ziffern enden. Z. B. (308)-135-7895 oder 308-135-7895 oder 308135-7895 oder 3081357895.

    Referenz :

http://www.zparacha.com/phone_number_regex/

0
Bebu