1056 Stimmen

Telefonnummern mit Regex validieren

Ich versuche, eine umfassende Regex zusammen zu setzen, um Telefonnummern zu validieren. Idealerweise würde es internationale Formate behandeln, aber es muss US-Formate, einschließlich der folgenden behandeln:

  • 1-234-567-8901
  • 1-234-567-8901 x1234
  • 1-234-567-8901 ext1234
  • 1 (234) 567-8901
  • 1.234.567.8901
  • 1/234/567/8901
  • 12345678901

Ich werde mit meinem derzeitigen Versuch antworten, aber ich hoffe, dass jemand etwas Besseres und/oder Eleganteres weiß.

6voto

Jon Ericson Punkte 20031

Ich glaube, die Nummer::Telefon::US y Regexp::Common (insbesondere die Quelle der Regexp::Common::URI::RFC2806 ) Perl-Module könnten helfen.

Die Frage sollte wahrscheinlich etwas ausführlicher formuliert werden, um den Zweck der Validierung der Zahlen zu erklären. Zum Beispiel ist 911 eine gültige Nummer in den USA, aber 911x ist es nicht für jeden Wert von x. Das ist so, dass die Telefongesellschaft berechnen kann, wann Sie mit dem Wählen fertig sind. Es gibt mehrere Varianten zu diesem Thema. Aber Ihre Regex prüft nicht den Vorwahlteil, so dass das kein Problem zu sein scheint.

Wie bei der Überprüfung von E-Mail-Adressen kann man auch bei einem gültigen Ergebnis nicht wissen, ob es jemandem zugewiesen ist, bis man es ausprobiert hat.

Wenn Sie versuchen, Benutzereingaben zu validieren, warum nicht das Ergebnis normalisieren und damit fertig werden? Wenn der Benutzer eine Zahl eingibt, die Sie nicht als gültige Zahl erkennen können, speichern Sie sie entweder als eingegebene Zahl oder entfernen Sie nicht verfügbare Zeichen. Die Nummer::Telefon::Normalisieren Perl-Modul könnte eine Quelle der Inspiration sein.

5voto

rooskie Punkte 484

Ersetzen Sie die Formatierungszeichen und prüfen Sie dann die verbleibenden Zeichen auf ihre Gültigkeit. In PHP,

 $replace = array( ' ', '-', '/', '(', ')', ',', '.' ); //etc; as needed
 preg_match( '/1?[0-9]{10}((ext|x)[0-9]{1,4})?/i', str_replace( $replace, '', $phone_num );

Eine komplexe Regexp wie diese zu brechen, kann genauso effektiv sein, ist aber viel einfacher.

4voto

Joe Phillips Punkte 46741

Ich arbeite für ein Marktforschungsunternehmen und wir müssen diese Art von Eingaben ständig filtern. Sie verkomplizieren die Sache zu sehr. Entfernen Sie einfach die nicht-alphanumerischen Zeichen, und schauen Sie, ob es eine Erweiterung gibt.

Zur weiteren Analyse können Sie sich bei einem der vielen Anbieter anmelden, die Ihnen Zugang zu einer Datenbank mit gültigen Nummern verschaffen und Ihnen mitteilen, ob es sich um Festnetz- oder Mobiltelefone handelt, ob die Verbindung unterbrochen wurde usw. Das kostet Geld.

3voto

Chris Punkte 11

Ich fand das sehr interessant. Ich habe es nicht getestet, aber es sieht so aus, als ob es funktionieren würde

<?php
/*
string validate_telephone_number (string $number, array $formats)
*/

function validate_telephone_number($number, $formats)
{
$format = trim(ereg_replace("[0-9]", "#", $number));

return (in_array($format, $formats)) ? true : false;
}

/* Usage Examples */

// List of possible formats: You can add new formats or modify the existing ones

$formats = array('###-###-####', '####-###-###',
                 '(###) ###-###', '####-####-####',
                 '##-###-####-####', '####-####', '###-###-###',
                 '#####-###-###', '##########');

$number = '08008-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '123-555-555';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1800-1234-5678';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '(800) 555-123';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}

echo "<br />";

$number = '1234567890';

if(validate_telephone_number($number, $formats))
{
echo $number.' is a valid phone number.';
}
?>

3voto

Abe Miessler Punkte 78979

Wahrscheinlich wäre es besser, dafür einen maskierten Eingang zu verwenden. Auf diese Weise können die Benutzer NUR Zahlen eingeben und Sie können sie nach Belieben formatieren. Ich bin nicht sicher, ob dies für eine Web-Anwendung ist, aber wenn es gibt es ein sehr Klick jQuery-Plugin, das einige Optionen für dies tun bietet.

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

In der Anleitung wird sogar erklärt, wie man die Eingabe von Telefonnummern maskiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X