2012-03-24 105 views
5

我需要一個正則表達式,在PHP和JavaScript中工作來驗證新西蘭本地,移動和freecall(0800)電話號碼。正則表達式來驗證新西蘭電話號碼

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

下面是一個正則表達式我發現在網絡上,但它似乎並不出於某種原因:

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

有人可以請幫助上面的表達?提前謝謝你的幫助。

更新 - 我的工作了和解決方案如下:

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

回答

2

爲什麼所有這些括號和括號?

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

你不必爲了使它工作而用圓括號包裝所有東西。這是巫術編程。例如,([0][8][0][0])只是0800

+0

這看起來不錯,我嘗試了它在PHP中,但它沒有工作出於某種原因。任何人都可以幫忙 – Chris 2012-03-28 07:50:45

+0

@Chris:我只能說這個表達式本身是可行的(http://rubular.com/r/ynr28Fcwui)。你應該看看PHP文檔。 – Tomalak 2012-03-28 08:36:31

1

沒有足夠的信息來說明您的問題的格式,以確保您的問題,但一個竅門可能是先刪除所有非數字字符,然後測試數字位數(就我而言可以看到它應該是9位數字?)。像這樣:

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

NZ電話號碼的格式是:手機 分鐘:XXX XXX XXX 最大:XXX XXXX XXXX 座機: XX XXXX XXX OR XXX XXX 0508 XXX XXX – Chris 2012-03-28 07:27:33