2017-05-26 57 views
0

中有效在我的应用程序的注册页面中,我有一个OTP检查。如何检查电话号码是否在android

我的问题是我想在发送OTP之前验证电话号码。

如何可以根据扩展我创建电话号码验证的正则表达式(阿曼+968,加拿大+1)

我已经试过PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber的); api验证电话号码。但是api总是返回true。例如:我已经将“0”传递给api,但它返回true。

有没有更好的选择来验证电话号码与国家扩展代码。

+0

使用'PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber);' –

+1

我建议你展示一些研究工作和你试图达到你所要求的内容 – djdere

+0

https://developer.android.com/reference/android/telephony/PhoneNumberUtils .html – shash678

回答

1

PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)是不正确的方式来检查电话号码是否有效。我找到了一个更好的解决方案,它为我工作。

首先我们需要在gradle文件中添加下面的库。

库:com.googlecode.libphonenumber:libphonenumber:8.4.2

我们需要通过手机号码和国家代码的下方功能,如果电话号码是有效的,它将返回true。

public static PhoneValidateResponse isPhoneNumberValidate(String mobNumber, String countryCode) { 
PhoneValidateResponse phoneNumberValidate = new PhoneValidateResponse(); 
     PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance(); 
     Phonenumber.PhoneNumber phoneNumber = null; 
     boolean finalNumber = false; 
     PhoneNumberUtil.PhoneNumberType isMobile = null; 
     boolean isValid = false; 
     try { 
      String isoCode = phoneNumberUtil.getRegionCodeForCountryCode(Integer.parseInt(countryCode)); 
      phoneNumber = phoneNumberUtil.parse(mobNumber, isoCode); 
      isValid = phoneNumberUtil.isValidNumber(phoneNumber); 
      isMobile = phoneNumberUtil.getNumberType(phoneNumber); 
      phoneNumberValidate.setCode(String.valueOf(phoneNumber.getCountryCode())); 
      phoneNumberValidate.setPhone(String.valueOf(phoneNumber.getNationalNumber())); 
      phoneNumberValidate.setValid(false); 

     } catch (NumberParseException e) { 
      e.printStackTrace(); 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } catch (NumberFormatException e) { 
      e.printStackTrace(); 
     } 
     if (isValid && (PhoneNumberUtil.PhoneNumberType.MOBILE == isMobile || 
       PhoneNumberUtil.PhoneNumberType.FIXED_LINE_OR_MOBILE == isMobile)) { 
      finalNumber = true; 
      phoneNumberValidate.setValid(true); 
     } 

     return phoneNumberValidate; 
    } 

模型类PhoneValidateResponse。

public class PhoneValidateResponse { 
    private String Phone; 
    private String Code; 
    private boolean isValid; 


    public String getPhone() { 
     return Phone; 
    } 

    public void setPhone(String phone) { 
     Phone = phone; 
    } 

    public String getCode() { 
     return Code; 
    } 

    public void setCode(String code) { 
     Code = code; 
    } 

    public boolean isValid() { 
     return isValid; 
    } 

    public void setValid(boolean valid) { 
     isValid = valid; 
    } 
} 

按我的方法PhoneValidateResponse的代码,如果isValid()的返回true,则给定的电话号码和国家代码相匹配。