簡體   English   中英

驗證新西蘭電話號碼的正則表達式

[英]Regular expression to validate New Zealand phone numbers

我需要一個適用於 PHP 和 JavaScript 的正則表達式來驗證新西蘭本地、移動和免費電話 (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, 0800123456789

下面是我在 web 上找到的一個正則表達式,但由於某種原因它似乎不起作用:

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

為什么所有這些括號和括號?

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

你不必用括號括起所有東西來使它工作。 這是伏都教編程。 例如, ([0][8][0][0])僅為0800

在你的問題中沒有足夠的關於NZ電話號碼格式的信息以確定這一點,但一個技巧可能是首先刪除所有非數字字符,然后在測試后檢查數字位數(據我所知,它應該是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

答案已過時,020 現在是有效的手機前綴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM