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

7
我需要一个在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})$/';
3个回答

2
为什么会有那么多括号和方括号?
^(\(0\d\)\d{7}|\(02\d\)\d{6,8}|0800\s\d{5,8})$

你不必把每个东西都用括号包起来才能使其正常工作。那是巫术编程。例如,([0][8][0][0]) 只需写成 0800

这看起来不错,我在 PHP 中尝试了一下,但由于某些原因它没有工作。有人可以帮忙吗? - Chris
@Chris:我能告诉你的是,这个表达式本身是有效的(http://rubular.com/r/ynr28Fcwui)。你应该查看一下PHP文档。 - Tomalak

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

新西兰电话号码格式如下:移动电话最小长度为xxx xxx xxx,最大长度为xxx xxxx xxxx;座机电话格式为xx xxx xxxx或0800 xxx xxx或0508 xxx xxx。 - Chris

0

这个答案已经过时了,020现在是一个有效的手机号码前缀。


什么是正确答案? - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接