android 根据区号判断手机号码是否符合格式

来源:互联网 发布:华东师范大学网络登录 编辑:程序博客网 时间:2024/05/16 14:58


    在Android项目开发中,在注册或者其他需要手机号码的地方,经常需要校验手机号码的有效性,那么我们如何判断手机号码的有效性呢,当然首先想到的是根据正则表达式来判断,不过不同国家的手机号码的长度不一样,同时我们要根据区号来判断是否该号码符合该区号,那么我们可以怎么做呢?下面提供一个我在项目中用到的方法。


   首先,导入这个jar包。

    http://pan.baidu.com/s/1kUKRayr


  其次,在你的android  studio的values/arrays.xml中插入这个国家区号和国家简称对应的数组:

  


   然后,现在,比如我们输入了一个手机号,区号CountryCode="+86", phoneNumber="15813849762" ,那么我们如何判断该手机号是否符合格式呢?


    第一步: 根据这个CountryCode获取对应的国家简称,可以用以下这个方法,遍历以上的数组,得到国家的简称;


     

String countryCode =getPhoneCountryCode(CountryCode.replace("+", ""), getResources().getStringArray(R.array.CountryCodes))[1];
   得到的countryCode 指得是国家简称

     

/** * * @param phone  :不带"+"号的区号.例如:86 * @param countryCodes  :values/arrays中存储的区号数组 * @return  :String[0]:当前传入的区号,string[1]:当前区号对应的国家简称 */public static String[] getPhoneCountryCode(String phone, String[] countryCodes) {    String[] countryCode = new String[2];    countryCode[0] = "";    countryCode[1] = "";    for (int i = 0; i < countryCodes.length; i++) {        try{                   if(countryCodes[i].split(",")[0].toString().equals(phone)){                countryCode[0] = countryCodes[i].split(",")[0];  //得到区号                countryCode[1] = countryCodes[i].split(",")[1];  //得到区号对应的国家简称                break;            }        }catch (Exception e){e.printStackTrace();        }    }    return countryCode;}
    第二步: 调用我们在上面导入的库来帮助我们判断该手机号码的有效性

  

boolean   isValid=isPhoneNumberValid(phoneNumber, countryCode );

 

/** * 根据区号判断是否是正确的电话号码 * @param phoneNumber :不带区号的电话号码 * @param countryCode :国家简称          return :true 合法  false:不合法   */public static boolean isPhoneNumberValid(String phoneNumber, String countryCode){    System.out.println("isPhoneNumberValid: "+phoneNumber+"/"+countryCode);    //NOTE: This should probably be a member variable.    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();    try    {        Phonenumber.PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);        return phoneUtil.isValidNumber(numberProto);    }    catch (NumberParseException e)    {        System.err.println("NumberParseException was thrown: " + e.toString());    }    return false;}
    it's over .


  另外,我们可以通过TelephonyManager.getSimCountryIso()来获取手机电话卡所代表的国家区号简称,然后和以上该数组匹配得到实际的区号即可,不过由于手机系统的权限和安全问题,所以并不是所有手机都能获取到SIM卡的区号。

/** * 直接输出电话卡的区号 * @param context * @return */public static String getCountryZipCode(Context context){    String CountryID="";    String CountryZipCode="";    TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);    //getNetworkCountryIso    CountryID= manager.getSimCountryIso().toUpperCase();    String[] rl=context.getResources().getStringArray(R.array.CountryCodes);    for(int i=0;i<rl.length;i++){        String[] g=rl[i].split(",");        if(g[1].trim().equals(CountryID.trim())){            CountryZipCode=g[0];            break;        }    }    return CountryZipCode;}

  

0 0