繁体   English   中英

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

[英]Checking for valid mobile number in android

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

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

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

提前致谢!

     //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()确保整个字符串 cooresponds (exactly) 到它所采用的正则表达式。 639[0-9]{9}表示字符串必须以 639 开头,然后紧跟 9 位数字 (0-9)。 例如,如果您想匹配"639"后跟 7 到 9 个数字,则可以使用: 639[0-9]{7,9} 正则表达式: http : //docs.oracle.com/javase/tutorial/essential/regex/

方法一:

获取 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

PS: "CH"是瑞士的国家代码。 您可以根据需要输入您的国家/地区代码。 它们在这里给出。 希望能帮助到你。

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

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

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

===

首先,将您的 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
<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
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM