电话号码验证Android

时间:2011-06-15 13:25:33

标签: android validation phone-number

如何检查电话号码是否有效?最长为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

17 个答案:

答案 0 :(得分:103)

使用isGlobalPhoneNumber() PhoneNumberUtils方法检测某个号码是否为有效电话号码。

实施例

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

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

答案 1 :(得分:35)

根据您指定的规则:

  

长度为13,包括角色+面前。

(并在代码中加入最小长度为10)

你想要一个看起来像这样的正则表达式:

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

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

偏离主题:我建议10-13的范围对国际电话号码字段来说太有限;你几乎肯定会找到比这更长和更短的有效数字。为了安全,我建议8到20的范围。

[编辑] OP声明由于转义序列,上述正则表达式不起作用。不知道为什么,但另一种选择是:

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

[编辑2] OP现在补充说+符号应该是可选的。在这种情况下,正则表达式在+之后需要一个问号,所以上面的示例现在看起来像这样:

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

答案 2 :(得分:23)

要验证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;
}

答案 3 :(得分:20)

你可以使用android的内置Patterns

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

此模式用于搜索看起来像它们的内容   可能是任意文本中的电话号码,而不是用于验证是否   事实上是一个电话号码。它会遗漏很多东西   合法的电话号码。

     

该模式符合以下条件:

     
      
  • 可选地,+符号后面紧跟一个或多个数字。   可以跟随空格,圆点或短划线。
  •   
  • 可选,数字组   括号,用空格,圆点或短划线分隔。
  •   
  • 字符串开头   并以数字结尾,包含数字,空格,点和/或   破折号。
  •   

答案 4 :(得分:8)

您还可以检查电话号码验证为

     /**
     * 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();
        }

    }

答案 5 :(得分:5)

如果您的手机格式是所述格式之一,则可以使用PhoneNumberUtils。如果效用函数都不符合您的需求,请使用常规表达。

答案 6 :(得分:4)

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

  

android.util.Patterns.PHONE

public class GeneralUtils {

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

}

答案 7 :(得分:2)

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

在此处查看您的案例:https://regex101.com/r/DuYT9f/1

答案 8 :(得分:2)

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} 

答案 9 :(得分:1)

您可以使用此library。您所需要做的就是传递您要验证的国家/地区和电话号码。

答案 10 :(得分:0)

 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();
            }

答案 11 :(得分:0)

这是您在Kotlin中如何简洁地做到这一点:

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

答案 12 :(得分:0)

我为国际电话号码验证和选择国家/地区代码提供了最佳解决方案 下面的图书馆为我辩解 Best library for all custom UI and functionality CountryCodePickerProject

答案 13 :(得分:0)

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

此正则表达式与埃及手机号码匹配

答案 14 :(得分:0)

我发现电话号码的正则表达式验证过于严格。确实需要时,我可以使用

^([+])?([^\d]?\d[^\d]?){5,15}

它将允许数字之间的字符,例如-(]或用户可能想到的任何东西。

要进行更认真的验证,请查看Veriphone

答案 15 :(得分:0)

这个方法怎么样:

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

有关详细信息,请参阅此 link

答案 16 :(得分:-1)

验证电话号码时,您不应该使用正则表达式。看看这个JSON API - numverify.com - 如果一个月打电话并且能够查看任何电话号码,它对于nunver是免费的。此外,每个请求都附带位置,线路类型和运营商信息。

相关问题