在android中检查有效的手机号码

时间:2013-05-15 04:40:47

标签: java android

我目前正在注册Android中的应用程序。我想要捕获在EditText框中输入的无效手机号码。点击提交按钮后,应用程序将检查输入的手机号码是否有效。

所有有效号码都应以"639"开头。我的问题是如何阅读用户输入的前三位数字?例如,用户输入639158716271,这是一个有效数字。虽然197837281919无效。

有谁能建议如何做到这一点?

提前致谢!

6 个答案:

答案 0 :(得分:5)

方法1:

获取EditText的实例:

EditText myEdit = (EditText) findViewById(R.id.edittext1);

然后获取当前显示的字符串:

String phoneNumber = myEdit.getText().toString();

如果您想要匹配的唯一初始号码,那么您可以按如下方式进行比较:

String initialPart = phoneNumber.substring(0, 4);  
//Get 1st three characters and then compare it with 639
boolean valid = initialPart.equals("639");

然后你可以继续进行其他比较。但是这种方法容易出错,你可能会错过一些极端情况。所以我建议采用方法2:

方式:2

然而,另一个非常好的方法是使用Google的 libphonenumber。文档说:

It is for parsing, formatting, storing and validating international phone numbers. The Java version is optimized for running on smartphone.

我用它来验证电话号码。它非常易于使用,您无需处理角落情况。它会考虑您的国家/地区以及用户可能输入的各种格式。它检查该号码是否对该区域有效。它还会处理用户可能输入的所有可能的有效格式,例如: "+xx(xx)xxxx-xxxx", "+x.xxx.xxx.xxx","+1(111)235-READ" ,"+1/234/567/8901", "+1-234-567-8901 x1234"(此处x为数字)。

以下是如何验证它的示例用法:

PhoneNumber NumberProto = null;
String NumberStr = "639124463869"
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
  NumberProto = phoneUtil.parse(NumberStr, "CH"); 
} catch (NumberParseException e) {
  System.err.println("NumberParseException was thrown: " + e.toString());
}
boolean isValid = phoneUtil.isValidNumber(NumberProto); // returns true or false

P.S:"CH"是瑞士的国家代码。您可以根据需要输入国家/地区代码。他们被给予here。希望能帮助到你。

答案 1 :(得分:4)

     //Get the string from the edit text by:
     String number = yourEditText.getText().toString();

     if(number != null && number.matches("639[0-9]{9}"))
     //do what you need to do for valid input
     else
     //do what you need to do for invalid input

matches()确保整个字符串(确切地)与它所采用的正则表达式相协调。 639[0-9]{9}表示字符串必须从639开始,然后紧跟9个数字(0-9)。例如,如果您想匹配"639"后跟7到9个数字,则可以使用:639[0-9]{7,9}。正则表达式:http://docs.oracle.com/javase/tutorial/essential/regex/

答案 2 :(得分:0)

您可以在字符串对象中使用startsWith方法:

String num = "639158716271"
if (num.startsWith("639") && num.length() == 12)
  // valid
else
  // invaid

答案 3 :(得分:0)

编辑:这是一个更长的解决方案。如果您真正需要的是验证史蒂夫所指出的数字,那么正则表达式是寻找更短代码的方法。

===

首先,限制您的EditText只接受数字,然后您可以使用以下内容来验证该数字的有效性。

public static final int NUMBER_LENGTH = 9; // This will be used for validation

/**
 * Returns the prefix of a phone number
 */
public String getNumberPrefix(String number) {
    if (number != null) {
        if (number.length() > NUMBER_LENGTH) {
            return number.substring(0, number.length() - NUMBER_LENGTH);
        }
    }
    return "";
}

/**
 * Checks if a phone number is valid based on length and prefix
 */
public boolean isValidNumber(String number, String prefix) {
    if (prefix == null) {
        prefix = "";
    }
    if (number != null) {
        if (number.length() > 0) {
            if ((number.length() == NUMBER_LENGTH + prefix.length()) && (getNumberPrefix(number).equals(prefix))) {
                return true;
            }
        }
    }
    return false;
}

因此,在您的情况下,您可以设置一个常数数字长度:

使用该方法的一些示例:

isValidNumber("639158716271", "639"); // This will return true
isValidNumber("631111111111", "639"); // This will return false
isValidNumber("6391587", "639"); // This will return false
isValidNumber("123456789000", "639"); // This will return false

答案 4 :(得分:0)

<EditText
                android:id="@+id/EditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:maxLength="12"
                 />

    int number = Intiger.ParseInt(EditText.getText.toString());

    if(number.startsWith("639")&& number.length == 12) 
    {
        //valid
    }
    else
    {
        //invalid
    }

答案 5 :(得分:0)

在android中检查有效的手机号码强文本 添加您的 XML Edittext

            android:maxLines="1"
            android:maxLength="10"
            android:inputType="number"