如何在Android应用程序中验证电话号码?

时间:2013-10-29 04:41:06

标签: java android

我正在开发android。在我的应用中,用户将通过在edittext中输入他们的电话号码进行注册。然后将此电话号码保存在数据库中。现在,当用户使用该应用程序登录时,我将从他的手机中获取联系人列表,并将其与注册此应用程序的人员进行比较。如果联系人列表中的号码与数据库中的号码匹配,那么我需要在列表视图中显示这些号码。这里的问题是如果用户在联系之前用+91或0保存他的号码,那么数据库中的号码与联系人不匹配。那时数字没有显示。

对于此问题,在输入编辑文本中的数字之前,是否需要保留任何警报?例如,在我给出的编辑文本中,Ph no:8923458128并将其保存在数据库中。现在我使用此号码和我的联系人列表登录了

  1. 9823484586
  2. 919988334856
  3. 假设上述2个数字存储在数据库中。但是第二次联系,用户输入为9988334856而没有+91。然后最后在listview而不是2个数字中只显示1个数字,因为第二个数字与数据库编号不匹配。

    我该如何解决这个问题?请帮助我。

7 个答案:

答案 0 :(得分:4)

如果您从数据库中提取所有手机,则可以使用以下代码,使用PhoneNumberUtils.compare()

将输入的手机与来自数据库的手机相匹配
  

它比较电话号码a和b,如果它们相同则返回true   足以用于来电显示。


private String getMatchedPhones(ArrayList<String> contactsFromDB, String phoneToMatch) {

    // Iterate all numbers and match 
    for (String numberFromDb : contactsFromDB) {
         if (PhoneNumberUtils.compare(numberFromDb, phoneToMatch)) {
             return phoneToMatch; // Or numberFromDb
         }
    }

    return null; // Or can custom msg. If not matched. 
}

答案 1 :(得分:1)

我认为最好的方法是用4列创建你的表 -

1)的id 2)姓名(如果需要) 3)国家代码 4)电话号码

现在在您的UI前缀国家代码中使用spiner,并在textview中提供电话号码类型的字段。在您的数据库中使用整数值来存储数字。

通过匹配您的电话号码,只需通过此查询 - 1)phoneNumber = phoneNumberEditText.getText()。toString(); 2) //从数据库中读取所有联系人

    List<Contacts> number = db.getAllNumber();
                        for (final Contacts cn : number) {

                            if ((phoneNumber.equals(cn.getNumber()){
//do what you want
}
        }

谢谢!希望它会对你有帮助。

答案 2 :(得分:1)

将这两行放在您的XML文件中的电话号码编辑文本字段

android:inputType="numberDecimal"
android:maxLength="10"
然后他不能输入超过10个数字,只有他输入数字。 您可以在另外一个文本字段中使用国家/地区代码并使用它进行验证。

答案 3 :(得分:1)

对于手机号验证,Android提供InBuilt Patterns。但它仅适用于API级别8及以上。请尝试以下一行代码。

 /* method for phone number validation */
private Boolean Number_Validate(String number)
{              
    return  !TextUtils.isEmpty(number) && (number.length()==10) && android.util.Patterns.PHONE.matcher(number).matches();
}

你可以通过在参数中传递数字来调用这个方法,它返回true或false。

Number_Validate(number);

希望你得到答案。 感谢。

答案 4 :(得分:0)

在数据库中使用TEXT而不是Int。当你使用Int时,如果第一个数字是0,它将忽略,所以只需使用TEXT。

答案 5 :(得分:0)

private boolean phvalidator(String ph2){

    // TODO Auto-generated method stub
     String expression = "^[0-9-1+]{10,15}$";
       CharSequence inputStr = ph;
       Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);
       Matcher matcher = pattern.matcher(inputStr);
       return (matcher.matches())? true : false;

答案 6 :(得分:0)

试试这个

final String mobile = emobile.getText().toString();
    if (!isValidMobile(mobile)){
        emobile.setError("Invalid Mobile");
    }

private boolean isValidMobile(String mobile) { if (!TextUtils.isEmpty(mobile)) { return Patterns.PHONE.matcher(mobile).matches(); } return false; }

相关问题