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

Java 在android中检查有效的手机号码,java,android,Java,Android,我目前正在注册一个android应用程序。我想捕获在编辑文本框中输入的无效手机号码。单击提交按钮后,应用程序将检查输入的手机号码是否有效 所有有效数字应以“639”开头。我的问题是如何读取用户输入的前三位数字?例如,用户输入639158716271,这是一个有效数字。而197837281919无效 有人能建议如何做到这一点吗 提前谢谢 //Get the string from the edit text by: String number = yourEditText.ge

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

所有有效数字应以
“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()
确保整个字符串(准确地)响应它所采用的正则表达式
639[0-9]{9}
表示字符串必须以639开头,然后后跟9位数字(0-9)。例如,如果要将
“639”
后跟7到9个数字进行匹配,可以使用:
639[0-9]{7,9}
。正则表达式:

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

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

编辑:这是一个较长的解决方案。如果您真的需要验证Steve指出的数字,那么Regex是缩短代码的方法

===

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

方法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

然而,另一个非常好的方法是使用谷歌的库。文件说:

用于解析、格式化、存储和验证国际电话号码。Java版本针对在智能手机上运行进行了优化。

我用它来验证电话号码。这是非常容易使用,你不需要照顾角落的情况。它考虑了您的国家/地区以及用户可能输入的各种格式。它检查数字是否对该区域有效。它还考虑了用户可能输入的所有可能的有效格式,如:
“+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
注:
“CH”
是瑞士的国家代码。您可以根据需要输入您的国家代码。他们是被给予的。希望能有帮助


<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
    }
int number=Intiger.ParseInt(EditText.getText.toString()); if(number.startsWith(“639”)&&number.length==12) { //有效的 } 其他的 { //无效的 }
在android中检查有效的手机号码strong文本 添加XML编辑文本

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

如果639之后的内容无效怎么办?你是对的,steve,但是当接受电话号码时,我们可以限制edittext只接受数字,这个解决方案可以正常工作。我想限制用户只输入数字比允许用户输入其他字符然后签入代码要好。如果我错了,请纠正我。好的观点,但在我的例子中,我限制了EditText只接受数字。我相当确定匹配是内置在java的字符串处理函数中的,因此您不需要使用模式,您可以只使用number.matches(“639[0-9]{9}”)“正则表达式很棒”这一说法极具争议性,人们需要了解正则表达式何时合适,何时不合适。不要仅仅因为你可以使用正则表达式,就用它来简化工作。请随意在答案中添加你的意见,意见总是受欢迎的,意见只是批评的机会:)有一个很好的单行解决方案。查看我的答案。它将给出一个
false
作为响应,即一个无效数字。你可以在这里试试自己:是啊,因为我刚刚开始回答这个问题,并想展示进一步比较的途径。如果这个人不想使用图书馆,那么你的答案可以用来检查。我给出了一个更一般化的答案,它适用于任何情况,给定任何电话号码。它可能会帮助其他人,如果不是谁问的。