资讯专栏INFORMATION COLUMN

java 验证手机号码、电话号码(包括最新的电信、联通和移动号码)

lanffy / 3272人阅读

摘要:目前的号码段更新代码座机电话格式验证中国电信号码格式验证手机段中国联通号码格式验证手机段简单手机号码校验,校验手机号码的长度和开头中国移动号码格式验证手机段仅手机号格式校验手机和座机号格式校验匹配多个号码以或空格隔开的格

目前的号码段(2017-06-01更新)

java代码

package com.linbilin.test;

import java.util.regex.Pattern;

public class CheckPhone {

    /** 座机电话格式验证 **/
    private static final String PHONE_CALL_PATTERN = "^(?:(d{3,4})|d{3,4}-)?d{7,8}(?:-d{1,4})?$";

    /**
     * 中国电信号码格式验证 手机段: 133,153,180,181,189,177,1700,173
     * **/
    private static final String CHINA_TELECOM_PATTERN = "(?:^(?:+86)?1(?:33|53|7[37]|8[019])d{8}$)|(?:^(?:+86)?1700d{7}$)";

    /**
     * 中国联通号码格式验证 手机段:130,131,132,155,156,185,186,145,176,1707,1708,1709,175
     * **/
    private static final String CHINA_UNICOM_PATTERN = "(?:^(?:+86)?1(?:3[0-2]|4[5]|5[56]|7[56]|8[56])d{8}$)|(?:^(?:+86)?170[7-9]d{7}$)";
    /**
     * 简单手机号码校验,校验手机号码的长度和1开头
     */
    private static final String SIMPLE_PHONE_CHECK = "^(?:+86)?1d{10}$";
    /**
     * 中国移动号码格式验证
     * 手机段:134,135,136,137,138,139,150,151,152,157,158,159,182,183,184
     * ,187,188,147,178,1705
     * 
     **/
    private static final String CHINA_MOBILE_PATTERN = "(?:^(?:+86)?1(?:3[4-9]|4[7]|5[0-27-9]|7[8]|8[2-478])d{8}$)|(?:^(?:+86)?1705d{7}$)";

    /**
     * 仅手机号格式校验
     */
    private static final String PHONE_PATTERN = new StringBuilder(300)
            .append(CHINA_MOBILE_PATTERN).append("|")
            .append(CHINA_TELECOM_PATTERN).append("|")
            .append(CHINA_UNICOM_PATTERN).toString();

    /**
     * 手机和座机号格式校验
     */
    private static final String PHONE_TEL_PATTERN = new StringBuilder(350)
            .append(PHONE_PATTERN).append("|").append("(")
            .append(PHONE_CALL_PATTERN).append(")").toString();


    /**
     * 匹配多个号码以,、或空格隔开的格式,如 17750581369
     * 13306061248、(596)3370653,17750581369,13306061248 (0596)3370653
     * @param input
     * @param separator 可以自己指定分隔符,如"、, "表示可以以顿号、逗号和空格分隔
     * @return
     */
    public static boolean checkMultiPhone(String input, String separator) {
        separator = escapeMetacharacterOfStr(separator);
        String regex = "^(?!.+["
                + separator
                + "]$)(?:(?:(?:(?:(d{3,4})|d{3,4}-)?d{7,8}(?:-d{1,4})?)|(?:1d{10}))(?:["
                + separator + "]|$))+$";
        return match(regex, input);
    }

    /**
     * 转义字符串中的[]-^元字符
     * 
     * @param input
     * @param separator
     * @return
     */
    private static String escapeMetacharacterOfStr(String input) {
        String regex = "[-^[]]";
        return input.replaceAll(regex, "$0");
    }

    /**
     * 仅手机号码校验
     * 
     * @param input
     * @return
     */
    public static boolean isPhone(String input) {
        return match(PHONE_PATTERN, input);
    }

    /**
     * 手机号或座机号校验
     * 
     * @param input
     * @return
     */
    public static boolean isPhoneOrTel(String input) {
        System.out.println(PHONE_TEL_PATTERN);
        return match(PHONE_TEL_PATTERN, input);
    }

    /**
     * 验证电话号码的格式
     * 
     * @author LinBilin
     * @param str
     *            校验电话字符串
     * @return 返回true,否则为false
     */
    public static boolean isPhoneCallNum(String str) {
        return match(PHONE_CALL_PATTERN, str);
    }

    /**
     * 验证【电信】手机号码的格式
     * 
     * @author LinBilin
     * @param str
     *            校验手机字符串
     * @return 返回true,否则为false
     */
    public static boolean isChinaTelecomPhoneNum(String str) {
        return match(CHINA_TELECOM_PATTERN, str);
    }

    /**
     * 验证【联通】手机号码的格式
     * 
     * @author LinBilin
     * @param str
     *            校验手机字符串
     * @return 返回true,否则为false
     */
    public static boolean isChinaUnicomPhoneNum(String str) {
        return match(CHINA_UNICOM_PATTERN, str);
    }

    /**
     * 验证【移动】手机号码的格式
     * 
     * @author LinBilin
     * @param str
     *            校验手机字符串
     * @return 返回true,否则为false
     */
    public static boolean isChinaMobilePhoneNum(String str) {
        return match(CHINA_MOBILE_PATTERN, str);
    }

    /**
     * 简单手机号码校验,校验手机号码的长度和1开头
     * 
     * @param str
     * @return
     */
    public static boolean isPhoneSimple(String str) {
        return match(SIMPLE_PHONE_CHECK, str);
    }

    /**
     * 匹配函数
     * 
     * @param regex
     * @param input
     * @return
     */
    private static boolean match(String regex, String input) {
        return Pattern.matches(regex, input);
    }

}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67558.html

相关文章

  • 2019最新移动联通电信号码正则

    摘要:由于新增了,等新号段,最新移动,电信,联通号段如下移动号段联通号段电信号段手机号码验证号码验证没有特别严谨验证规则移动号码验证验证规则联通号码验证验证规则电信号码验证验证规则原谅不会命名,如果写法或者号段有问题,希望大家告诉我,我马上 由于新增了166,199,198等新号段,最新移动,电信,联通号段如下:移动号段:134 135 136 137 138 139 144 147 148...

    y1chuan 评论0 收藏0
  • 106三网短信是什么?

    摘要:三网短信是指中国移动,中国联通,中国电信号码。三网短信是现阶段应用广泛的合法群发消息,短信渠道之一。根据三网融合短信渠道发布的验证码短信,中国移动,中国联通或,中国电信用户收到的手机短信特殊服务号码都是一样的,其特点是以开头。三网106短信是指中国移动,中国联通,中国电信号码。收到的短信显示的是同一个手机号码或者106号码短信,2106号码只属于三网融合的一个相对合法的短信通道。其中我们比较...

    3119555200 评论0 收藏0
  • 最新全国手机号码归属地信息SQLite数据库2019年2月更新

    摘要:手机号码归属地数据库项目地址安装使用查询数据库中手机号段总条数查询北京市联通手机号段总条数查询指定手机号段归属地信息联通北京北京数据表结构表表表字段卡类型定义移动联通电信电信虚拟运营商联通虚拟运营商移动虚拟运营商数据可视化下载文件,使用 手机号码归属地SQLite数据库Github项目地址:https://github.com/lalala223/phone-db 安装 pip ins...

    csRyan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<