【问题标题】:Regular expression to validate New Zealand phone numbers验证新西兰电话号码的正则表达式
【发布时间】:2012-04-08 16:13:11
【问题描述】:

我需要一个适用于 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})$/';

【问题讨论】:

    标签: php javascript regex


    【解决方案1】:

    为什么要这么多括号和方括号?

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

    您不必将所有内容都放在括号中以使其正常工作。那是巫毒编程。例如,([0][8][0][0]) 就是 0800

    【讨论】:

    • 这看起来不错,我在 PHP 中尝试过,但由于某种原因它不起作用。有人可以帮忙吗?
    • @Chris:我只能说表达式本身有效(rubular.com/r/ynr28Fcwui)。您应该查看 PHP 文档。
    【解决方案2】:

    在您的问题中没有足够的关于新西兰电话号码格式的信息来确定这一点,但一个技巧可能是首先删除所有非数字字符,然后测试数字位数(尽我所能看到它应该是 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 OR 0800 xxx xxx 0508 xxx xxx
    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2014-06-25
    相关资源
    最近更新 更多