如何在android中检查电话号码是不是有效

Posted

技术标签:

【中文标题】如何在android中检查电话号码是不是有效【英文标题】:How to check if phone number is valid in android如何在android中检查电话号码是否有效 【发布时间】:2017-10-27 02:13:13 【问题描述】:

在我的应用程序的注册页面上,我进行了 OTP 检查。

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

如何根据分机创建电话号码验证正则表达式(对于阿曼 +968,对于加拿大 +1)

我已经尝试过 PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber);用于验证电话号码的 API。但是 api 总是返回 true。

例如,我已将“0”传递给 API,但它返回 true。

有没有更好的选择来验证带有国家分机代码的电话号码?

【问题讨论】:

使用PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber); 我建议您展示一些研究工作以及您为实现您的要求所做的努力 developer.android.com/reference/android/telephony/… @Shinil 我已经尝试过 PhoneNumberUtils.isGlobalPhoneNumber() 函数。但是,如果我传递任何数字,如“0”,则 api 将返回 true。这是不正确的 【参考方案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,则给定的电话号码和国家/地区代码匹配。

【讨论】:

我的项目中没有 PhoneNumberUtil 的导入选项。是否有任何图书馆问题或其他问题。期待您的回复。

以上是关于如何在android中检查电话号码是不是有效的主要内容,如果未能解决你的问题,请参考以下文章

当用户点击第 11 个号码时,如何验证输入文本(在 html 中)是不是是有效的电话号码?

Android通过电话号码有效地获取联系人姓名以在ListView中显示

如何在 AWS Amplify for Flutter 中检查用户是不是已确认(电子邮件/电话验证)

安卓 | Firestore 规则 |检查用户名和电话是不是已经存在

检查有效的印度移动电话号码

我需要从我的 android 应用程序中拨打电话号码吗?从下面哪一个如果有效