我目前正在注册Android中的应用程序。我想要捕获在EditText框中输入的无效手机号码。点击提交按钮后,应用程序将检查输入的手机号码是否有效。
所有有效号码都应以"639"
开头。我的问题是如何阅读用户输入的前三位数字?例如,用户输入639158716271
,这是一个有效数字。虽然197837281919
无效。
有谁能建议如何做到这一点?
提前致谢!
答案 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"