电话号码验证 Android

如何检查电话号码是否有效?它的长度为13(包括前面的字符 +)。

我该怎么做?

我试过了:

String regexStr = "^[0-9]$";


String number=entered_number.getText().toString();


if(entered_number.getText().toString().length()<10 || number.length()>13 || number.matches(regexStr)==false  ) {
Toast.makeText(MyDialog.this,"Please enter "+"\n"+" valid phone number",Toast.LENGTH_SHORT).show();
// am_checked=0;
}`

我还试过这个:

public boolean isValidPhoneNumber(String number)
{
for (char c : number.toCharArray())
{
if (!VALID_CHARS.contains(c))
{
return false;
}
}
// All characters were valid
return true;
}

两个都不管用。

输入类型: + sign to be accepted and from 0-9 numbers and length b/w 10-13 and should not accept other characters

137652 次浏览

如果您的电话格式是所描述的格式之一,则可以使用 PhoneNumberUtils。如果没有一个实用函数符合您的需要,那么使用正则表达式。

根据你指定的规则:

最大长度为13,包括字符 + 前面。

(并且在代码中包含10的最小长度)

你需要一个像这样的正则表达式:

^\+[0-9]{10,13}$

使用正则表达式中编码的最小和最大长度,您可以从 if()块中删除这些条件。

题外话: 我建议10-13的范围对于国际电话号码字段来说太有限了; 你几乎肯定会找到比这个更长更短的有效号码。为了安全起见,我建议范围在8-20之间。

[编辑] OP 声明上面的正则表达式由于转义序列而不能正常工作。不知道为什么,但是可以这样做:

^[+][0-9]{10,13}$

[编辑2] OP 现在添加了 +符号应该是可选的。在这种情况下,正则表达式在 +之后需要一个问号,因此上面的示例现在看起来如下:

^[+]?[0-9]{10,13}$

使用 PhoneNumberUtilsisGlobalPhoneNumber()方法检测一个号码是否是有效的电话号码。

例子

System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));

由于第二个电话号码包含 f,因此第一个 print 语句的结果为 true,而第二个语句的结果为 false。

你可以使用 android 内置的 Patterns:

public boolean validCellPhone(String number) {
return android.util.Patterns.PHONE.matcher(number).matches();
}

这个模式用于搜索看起来像它们的东西 可能是任意文本的电话号码,而不是用来验证 事实上,有些东西是一个电话号码。它会错过很多东西 合法的电话号码。

这种模式符合以下情况:

  • 可选地,一个 + 符号紧接着一个或多个数字。 空格、点或破折号可以跟在后面。
  • 中的数字集 括号,用空格、点或破折号分隔。
  • 字符串开始 以数字结尾,包含数字、空格、点和/或 破折号。

要验证 Android 中特定区域的电话号码,可以使用 Google 的 LibPhoneNumber,以及下面的代码作为示例:

public boolean isPhoneNumberValid(String phoneNumber, String countryCode) {
// NOTE: This should probably be a member variable.
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();


try {
PhoneNumber numberProto = phoneUtil.parse(phoneNumber, countryCode);
return phoneUtil.isValidNumber(numberProto);
} catch (NumberParseException e) {
System.err.println("NumberParseException was thrown: " + e.toString());
}
    

return false;
}

您也可以检查电话号码的验证,如

     /**
* Validation of Phone Number
*/
public final static boolean isValidPhoneNumber(CharSequence target) {
if (target == null || target.length() < 6 || target.length() > 13) {
return false;
} else {
return android.util.Patterns.PHONE.matcher(target).matches();
}


}

验证电话号码时不应该使用正则表达式。查看这个 JSON API-Numverify.com-它是免费的一个 nunver 如果呼叫一个月,并能够检查任何电话号码。另外,每个请求都包含位置、线路类型和运营商信息。

我们可以使用模式来验证它。

机器人 Util 模式,手机

public class GeneralUtils {


private static boolean isValidPhoneNumber(String phoneNumber) {
return !TextUtils.isEmpty(phoneNumber) && android.util.Patterns.PHONE.matcher(phoneNumber).matches();
}


}
^\+?\(?[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?

检查你的箱子: https://regex101.com/r/DuYT9f/1

 String validNumber = "^[+]?[0-9]{8,15}$";


if (number.matches(validNumber)) {
Uri call = Uri.parse("tel:" + number);
Intent intent = new Intent(Intent.ACTION_DIAL, call);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
return;
} else {
Toast.makeText(EditorActivity.this, "no phone number available", Toast.LENGTH_SHORT).show();
}

在 Kotlin,你可以这样做:

fun String.isPhoneNumber() =
length in 4..10 && all { it.isDigit() }

我得到了国际电话号码验证和选择国家代码的最佳解决方案 以下图书馆是合理的我 所有自定义 UI 和功能的最佳库 CountryCodePickerProject

^\+201[0|1|2|5][0-9]{8}

这个正则表达式与埃及手机号码相符

val UserMobile = findViewById<edittext>(R.id.UserMobile)
val msgUserMobile: String = UserMobile.text.toString()
fun String.isMobileValid(): Boolean {
// 11 digit number start with 011 or 010 or 015 or 012
// then [0-9]{8} any numbers from 0 to 9 with length 8 numbers
if(Pattern.matches("(011|012|010|015)[0-9]{8}", msgUserMobile)) {
return true
}
return false
}


if(msgUserMobile.trim().length==11&& msgUserMobile.isMobileValid())
{//pass}
else
{//not valid}

这个方法怎么样:

private static boolean validatePhoneNumber(String phoneNumber) {
// validate phone numbers of format "1234567890"
if (phoneNumber.matches("\\d{10}"))
return true;
// validating phone number with -, . or spaces
else if (phoneNumber.matches("\\d{3}[-\\.\\s]\\d{3}[-\\.\\s]\\d{4}"))
return true;
// validating phone number with extension length from 3 to 5
else if (phoneNumber.matches("\\d{3}-\\d{3}-\\d{4}\\s(x|(ext))\\d{3,5}"))
return true;
// validating phone number where area code is in braces ()
else if (phoneNumber.matches("\\(\\d{3}\\)-\\d{3}-\\d{4}"))
return true;
// Validation for India numbers
else if (phoneNumber.matches("\\d{4}[-\\.\\s]\\d{3}[-\\.\\s]\\d{3}"))
return true;
else if (phoneNumber.matches("\\(\\d{5}\\)-\\d{3}-\\d{3}"))
return true;


else if (phoneNumber.matches("\\(\\d{4}\\)-\\d{3}-\\d{3}"))
return true;
// return false if nothing matches the input
else
return false;
}


System.out.println("Validation for 1234567890 : " + validatePhoneNumber("1234567890"));
System.out.println("Validation for 1234 567 890 : " + validatePhoneNumber("1234 567 890"));
System.out.println("Validation for 123 456 7890 : " + validatePhoneNumber("123 456 7890"));
System.out.println("Validation for 123-567-8905 : " + validatePhoneNumber("123-567-8905"));
System.out.println("Validation for 9866767545 : " + validatePhoneNumber("9866767545"));
System.out.println("Validation for 123-456-7890 ext9876 : " + validatePhoneNumber("123-456-7890 ext9876"));

产出:

Validation for 1234567890 : true
Validation for 1234 567 890 : true
Validation for 123 456 7890 : true
Validation for 123-567-8905 : true
Validation for 9866767545 : true
Validation for 123-456-7890 ext9876 : true

更多信息请参考此 链接

试试这个函数,它应该工作。

fun isValidPhone(phone: String): Boolean =
phone.trimmedLength() in (10..13) && Patterns.PHONE.matcher(phone).matches()