[英]Checking whether a String is a valid number: ArrayIndexOutOfBoundsException
[英]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.