webentwicklung-frage-antwort-db.com.de

Bestätigen Sie die Telefonnummer mit Javascript

Ich versuche, Telefonnummern wie 123-345-3456 und (078)789-8908 mit JavaScript zu validieren. Hier ist mein Code

function ValidateUSPhoneNumber(phoneNumber) {
  var regExp = /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}/;
  var phone = phoneNumber.match(regExp);
  if (phone) {
    alert('yes');
    return true;
  }
  alert('no');
  return false;
}

Ich teste die Funktion mit ValidateUSPhoneNumber('123-345-34567'), die 5 Stellen vor dem letzten Bindestrich hat, der gemäß Regex ungültig ist. Aber die Funktion gibt true zurück. Kann irgendjemand erklären warum?

23
iJade

JavaScript zur Bestätigung der Telefonnummer:

function phonenumber(inputtxt) {
  var phoneno = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
  if(inputtxt.value.match(phoneno)) {
    return true;
  }
  else {
    alert("message");
    return false;
  }
}

Das obige Skript stimmt überein:

XXX-XXX-XXXX
XXX.XXX.XXXX
XXX XXX XXXX

Wenn Sie ein Pluszeichen vor der Nummer wie folgt verwenden möchten 
+ XX-XXXX-XXXX 
+ XX.XXXX.XXXX 
+ XX XXXX XXXX
Verwenden Sie den folgenden Code: 

function phonenumber(inputtxt) {
  var phoneno = /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/;
  if(inputtxt.value.match(phoneno)) {
    return true;
  }  
  else {  
    alert("message");
    return false;
  }
}
34
coolprarun

Dieser reguläre Ausdruck /^(\([0-9]{3}\)\s*|[0-9]{3}\-)[0-9]{3}-[0-9]{4}$/ validiert alle folgenden Punkte:

'123-345-3456';
'(078)789-8908';
'(078) 789-8908'; // Note the space

Um aufzuschreiben, was passiert:

Regular expression visualization

  1. Die Gruppe am Anfang überprüft zwei Möglichkeiten, entweder (XXX) oder XXX-, mit optionalen Leerzeichen nach der schließenden Klammer.
  2. Der Teil nach der Gruppe sucht nach XXX-XXX
23
Broxzier

kann jemand erklären warum

weil Ihr regulärer Ausdruck der Eingabe entspricht. Es ist nur so, dass die Eingabe auch die zusätzlichen Zeichen enthält. Sie haben '^' als Zeichen für den Zeilenanfang angegeben, aber (wie Andy bereits sagte), Sie sollten '$' als Zeilenende angeben.

Wenn Sie Ihren Regex mit '^' beginnen und mit '$' beenden, werden nur Zeilen gefunden, die nur mit Ihrem Regex übereinstimmen.

Wenn Sie Ihren Regex mit '^' beginnen und ihn nicht mit '$' beenden, stimmen Sie Zeilen überein, die mit einer Sequenz beginnen, die Ihrem Regex entspricht.

2
Secesh

Dies ist bei weitem die einfachste Methode, die ich gefunden habe, um mit Javascript regex das Telefonnummernformat zu überprüfen. In diesem Beispiel wird geprüft, ob es sich um eine 10-stellige Zahl handelt.

<input name="phone" pattern="^\d{10}$" type="text" size="50">

Das Eingabefeld wird markiert, wenn auf die Schaltfläche zum Senden geklickt wird, wenn das Muster nicht mit dem Wert übereinstimmt und keine weiteren CSS oder JS erforderlich sind. 

1
Mike Volmar

^(\(?[0-9]{3}\)?)((\s|\-){1})?[0-9]{3}((\s|\-){1})?[0-9]{4}$

Vorausgesetzt, Sie validieren US-Telefonnummern, wird dies den Trick tun.

Zuerst erlauben wir 0 oder 1 offene Klammern, um \(? Zu starten.

Dann erlauben wir 3 aufeinanderfolgende Ziffern zwischen 0-9 [0-9]{3}

Danach wiederholen wir den ersten Schritt und erlauben 0 oder 1 schließende Klammern \)?

Für die zweite Gruppierung lassen wir ein Leerzeichen oder einen Bindestrich 0 oder 1 Mal zu ((\s|\-){1})?

Dies wird zwischen der zweiten und dritten Gruppierung von Zahlen wiederholt, und wir suchen nach drei aufeinanderfolgenden Ziffern und dann nach vier aufeinanderfolgenden Ziffern, um es zu beenden. Ich denke, dass dies für US-Telefonnummern die Grundlagen für viele verschiedene Arten der Formatierung der Nummer abdeckt, aber einschränkend genug ist, dass sie keine unvernünftige Zeichenfolge übergeben können.

1
rynjwssl

Kann jemand erklären warum?

Dies geschieht, weil Ihr regulärer Ausdruck nicht mit einem Anker-Meta-Zeichen endet, z. B. dem Zeilenende $ oder einer Word-Grenze \b.

Wenn Sie also die Regex-Engine fragen, ob 123-345-34567 eine gültige Telefonnummer ist, versucht sie, eine Übereinstimmung innerhalb dieser Zeichenfolge zu finden. Daher stimmt sie mit 123- mit diesem Teil (\([0-9]{3}\) |[0-9]{3}-) überein, dann stimmt 345- mit diesem Teil [0-9]{3}- überein, und 3456 mit diesem Teil [0-9]{4}.

Nun stellt die Engine fest, dass sie den gesamten regulären Ausdruck durchlaufen hat und in Ihrer Eingabe eine Zeichenfolge gefunden hat, die mit dem regulären Ausdruck übereinstimmt, obwohl ein Zeichen - die Zahl 7 - in der Eingabezeichenfolge übrig war. Daher stoppt sie und gibt Erfolg zurück, weil sie gefunden hat eine passende Unterzeichenfolge.

Wenn Sie $ oder \b am Ende Ihres regulären Ausdrucks angegeben haben, läuft die Engine auf die gleiche Weise wie zuvor. Dann versucht sie, $ oder \b zu passen, findet jedoch die letzte Zahl - die 7 - und ist keine Word-Grenze \b noch ein Zeilenende $, so dass er stoppt und keine Übereinstimmung findet.

1
Ibrahim Najjar

Sie können dieses Jquery-Plugin verwenden:

http://digitalbush.com/projects/masked-input-plugin/

Siehe Demo-Registerkarte, Telefonoption.

1
Sheetal

Fügen Sie am Ende der Regex eine Word-Begrenzung \b hinzu:

/^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}\b/

wenn das Leerzeichen nach ) optional ist:

/^(\([0-9]{3}\)\s*|[0-9]{3}-)[0-9]{3}-[0-9]{4}\b/
0
Toto

Fügen Sie am Ende der Regex ein $ hinzu, um das Ende des Musters anzuzeigen:

var regExp = /^(\([0-9]{3}\)\s?|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/;
0
Andy

So mache ich es.

function validate(phone) {
    const regex = /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/;
    return regex.test(phone)
}

Und dann,

validate('1234567890')     // true
validate(1234567890)       // true
validate('(078)789-8908')  // true
validate('123-345-3456')   // true
0
Muhammad Ovi
/^1?\s?(\([0-9]{3}\)[- ]?|[0-9]{3}[- ]?)[0-9]{3}[- ]?[0-9]{4}$/

Hiermit werden alle US-Stilnummern mit oder ohne die 1 und mit oder ohne Klammern in der Vorwahlnummer überprüft (wenn sie jedoch richtig verwendet werden. IE (902-455-4555 funktioniert nicht, da keine schließenden Klammern vorhanden sind.) für entweder - oder ein Leerzeichen zwischen den Sätzen, falls gewünscht.) Es funktioniert für die von op.

0
user10952615

Wenn Sie ein Eingabe-Tag verwenden, hilft Ihnen dieser Code. Ich schreibe diesen Code von mir selbst und denke, dass dies eine sehr gute Art ist, Input zu verwenden. Sie können es jedoch mit Ihrem Format ändern. Es hilft Benutzern, ihr Format am Eingabe-Tag zu korrigieren.

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}
0
user4410354