2012-03-24 17 views
5

Ich brauche einen regulären Ausdruck, der in PHP und JavaScript funktioniert, um Neuseelands lokale, mobile und freecall (0800) Telefonnummern zu validieren.Regulärer Ausdruck, um Neuseeland-Telefonnummern zu validieren

Matches:  (09)1234567, (021)123456, (021)1234567, (027)123456, 0800 12345, 0800 1234578 
Non-Matches: (09)123456 , (021)12345 , (031)1234567, (027)12345 , 0800-1234, 080

Unten finden Sie ein regulärer Ausdruck die ich im Internet gefunden, aber es scheint nicht aus irgendeinem Grund zu arbeiten:

(^ ([0] \ d {1})) (\ d {7 } $) | (^ ([0] [2] \ d {1})) (\ d {6,8} $) | ([0] [8] [0] [0]) ([\ s]) (\ d {5,8} $)

Kann jemand bitte mit dem obigen Ausdruck helfen? Danke im Voraus für Ihre Hilfe.

UPDATE - ich arbeitete es aus und die Lösung unter:

$phone_number = preg_replace('/[^\d\(\)]/', '', $phone_number); 
$pattern = '/^(\((03|04|06|07|09)\)\d{7})|(\((021|022|025|027|028|029)\)\d{6,8})|((0508|0800|0900)\d{5,8})$/'; 

Antwort

2

Warum all diese Klammern und Klammern?

^(\(0\d\)\d{7}|\(02\d\)\d{6,8}|0800\s\d{5,8})$ 

Sie müssen nicht alles in Klammern umwandeln, damit es funktioniert. Das ist Voodoo-Programmierung. Zum Beispiel ist ([0][8][0][0]) einfach 0800.

+0

Das sieht gut aus und ich habe es in PHP versucht, aber es hat aus irgendeinem Grund nicht funktioniert. Jeder kann helfen? – Chris

+0

@Chris: Ich kann nur sagen, dass der Ausdruck selbst funktioniert (http://rubular.com/r/ynr28Fcwui). Sie sollten sich die PHP-Dokumente ansehen. – Tomalak

1

Es gibt nicht genug Informationen über die Formatierung von NZ-Telefonnummern in Ihrer Frage, um sicher zu sein, aber ein Trick könnte sein, zuerst alle nicht-Ziffern zu entfernen und danach die Anzahl der Ziffern zu testen (soweit I kann es 9 Ziffern sehen?). Etwas wie:

var phonenr = '(09)1234567'.replace(/[\(\)\s\-]/g,'') 
    ,valid = phonenr.length === 9; 
// or check if it's all digits, starting with 0 as well as the length 
valid = /^0\d+$/.test(phonenr) && phonenr.length === 9 
+0

Formatierung von NZ Telefonnummern ist: Mobil min: xxx xxx xxx max: xxx xxxx xxxx Festnetz: xx xxx xxxx OR 0800 xxx xxx xxx xxx 0508 – Chris

Verwandte Themen