验证邮政编码和电话号码的正则表达式

4

我正在创建一个带有警告元素的表单。所有东西都很好,但需要更好地定义我的模式。

                $("#postcode").inputNotes( 
              {
                warning: {
                  pattern: /^[0-9]+$/,
                  type: 'note',
                  text: 'Only numbers, please ...',
                  inversedBehavior: true
                }
              }
            );
            $("#phone").inputNotes( 
              {
                warning: {
                  pattern: /^[0-9]+$/,
                  type: 'note',
                  text: 'Only numbers, no spaces please ...',
                  inversedBehavior: true
                }
              }
            );

针对邮政编码警告,我希望模式能够匹配4个数字。

针对电话号码警告,我希望模式能够匹配10个数字。

非常感谢您的帮助。

7个回答

11
以下是关于澳大利亚邮政编码的规则:
ACT:0200-0299 和 2600-2639。
NSW:1000-1999、2000-2599 和 2640-2914。
NT:0900-0999 和 0800-0899。
QLD:9000-9999 和 4000-4999。
SA:5000-5999。
TAS:7800-7999 和 7000-7499。
VIC:8000-8999 和 3000-3999。
WA:6800-6999 和 6000-6799。
正则表达式: ^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$
通过: 0200|||7312|||2415
失败: 0300|||7612|||2915

3
2019年时邮政编码范围的更新正则表达式为:^(0[289][0-9]{2})|([123456789][0-9]{3})$ - Mark Parnell

10

澳大利亚邮政局已经在2019年极大地简化了规则。现在只需要考虑以下范围:
0200-0299、0800-0999和1000-9999

因此,验证澳大利亚邮政编码的正则表达式就是:

^(0[289][0-9]{2})|([1-9][0-9]{3})$

6

更新:

对于6位或10位数字: 模式:/^[0-9]{10}|[0-9]{6}$/,

对于4位邮编: 模式:/^[0-9]{4}$/,

对于10位电话号码: (如果电话号码不能以0开头) 模式:/^[1-9][0-9]{9}$/,

(如果电话号码可以以0开头) 模式:/^[0-9]{10}$/,


@alex:我从未见过以0开头的10位电话号码。为了防止这些号码存在,我在帖子中更新了一条注释。 - Chandu
手机号码以0开头,我们要求用户输入其所在州的前缀(澳大利亚),即01、02等。 - 422
@Cybernate,我和@422来自澳大利亚,移动电话号码以“0”开头(除非使用其国家代码前缀,例如“+61”)。 - alex
@cybernate,太好了,问题是...如果用户输入的数字大于6但小于10,则文本警报会消失。我们在页面加载时显示消息,并在正则表达式模式匹配后消息消失。这在输入6位数字时有效,消息消失并且即使添加7位数字也保持消失状态...这有点否定了问题。也许我们应该在两个备用表单字段中添加此功能,以处理6位或10位数字。 - 422
@alex。我完全了解代理的问题,我们通过在数据库中存储成员IP地址并仅允许已登录的成员访问表单来解决这个问题。这是我们所能做的最多的了。否则,表单不会显示给未登录用户,但是我知道他们可以通过代理绕过此限制。 - 422
显示剩余7条评论

3

对于4位数字邮政编码,您可以使用/^\d{4}$/

对于10位数字邮政编码,您可以使用/^\d{10}$/

请注意,有些人会在电话号码中输入空格、括号等字符。在使用/[^\d]+/g进行验证之前,您应该先去除所有非数字字符。


谢谢,那么你的正则表达式和@cybernate有什么区别?现在我真的很困惑。 - 422
@422 其实并不是很复杂,我只是使用了 \d 简写来代替 [0-9] 字符类,并且允许有前导零。 - alex
明白了,我会在其他正则表达式中使用它,非常好的建议。这是我第一次尝试这个... - 422

2

不要使用+修饰符,尝试使用{num},其中num是您想要的前一个原子实例数。


谢谢,我已经将这个作为指针添加到我的笔记中了,感谢您的回答 :) - 422

1

所有这些答案都假设您将文本字段限制为4个字符,例如(12345)是有效的,如果要限制长度,请使用以下方法

^(0[289][0-9]{2})$|^([1-9][0-9]{3})$

0

这里为了节省大家的时间,提供一个使用 jQuery 的示例:

 $("#address-postal-code").once().on('blur', function (e) {
    var myRegEx = new RegExp('^(0[289][0-9]{2})|([1-9][0-9]{3})$');
    var ele = $(this);
    if (!myRegEx.test(ele.val())) {
        console.log('no good');
    }
    else {
        console.log('good');
    }
})

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