正则表达式验证新西兰电话号码

时间:2012-03-24 09:03:55

标签: php javascript regex

我需要一个适用于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

下面是我在网上找到的正则表达式,但由于某种原因它似乎不起作用:

(^([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 :(得分:2)

为什么所有这些括号和括号?

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

你不必将所有东西都包在一对括号中以使其有效。这是伏都教编程。例如,([0][8][0][0])只是0800

答案 1 :(得分:1)

在你的问题中没有足够的关于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