电话号码验证Android

Uda*_*ran 51 validation android 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;
}`
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

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

两者都不起作用.

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

Sun*_*hoo 111

使用isGlobalPhoneNumber()方法PhoneNumberUtils检测号码是否是有效的电话号码.

System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));
Run Code Online (Sandbox Code Playgroud)

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

  • 我正在使用(!PhoneNumberUtils.isGlobalPhoneNumber("1234")),然后它也作为有效数字.实际上它不在哪里.我该怎么办? (9认同)
  • 请注意,对于(123)456-7890等格式,isGlobalPhoneNumber将返回false(而123-456-7890将返回true) (7认同)
  • 方法不可靠 (4认同)
  • 这是一个比其他人更好的答案! (3认同)
  • 不起作用!对于本地号码 0503701329 返回 true。确实不可靠的解决方案 (3认同)
  • 我不推荐这个。它说“1”是一个有效的全球电话号码 (3认同)
  • 这种方法并不可靠。对于包含“*”甚至 53123123 的数字,它返回 true (2认同)

Spu*_*ley 37

根据您指定的规则:

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

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

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

^\+[0-9]{10,13}$
Run Code Online (Sandbox Code Playgroud)

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

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

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

^[+][0-9]{10,13}$
Run Code Online (Sandbox Code Playgroud)

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

^[+]?[0-9]{10,13}$
Run Code Online (Sandbox Code Playgroud)


Dis*_*Dev 24

要验证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;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您没有该区域,也可以执行`phoneUtil.parse(phonePrefix + phoneNumber,null)`. (2认同)
  • 这应该是接受的答案.我试图验证两个国家/地区的电话号码,并在错误和有效时检测到它们.如果我输入国家代码+至少一个额外数字,其他答案用于显示有效 (2认同)
  • 请注意,PhoneNumberUtils 可能会过时。即不时向运营商添加新号码,因此 PhoneNumberUtils 继续将它们报告为无效,而它们实际上现在有效。理想情况下,您会在添加新数字后更新依赖项,但这需要更新应用程序,因此您可能会在发生这种情况之前阻止用户。 (2认同)
  • 要集成此库,请将“implementation group: 'com.googlecode.libphonenumber', name: 'libphonenumber', version: '8.4.2'”插入到您的 Gradle 中。 (2认同)

小智 20

你可以使用内置的android Patterns:

public boolean validCellPhone(String number)
{
    return android.util.Patterns.PHONE.matcher(number).matches();
}
Run Code Online (Sandbox Code Playgroud)

此模式用于搜索看似可能是任意文本中的电话号码的内容,而不是用于验证某些内容是否实际上是电话号码.它会遗漏很多合法的电话号码.

该模式符合以下条件:

  • 可选地,+符号后面紧跟一个或多个数字.可能会出现空格,圆点或破折号.
  • 可选地,括号中的数字组,由空格,点或短划线分隔.
  • 以数字开头和结尾的字符串,包含数字,空格,点和/或短划线.

  • 如果看起来像电话号码不确定它是否确实是电话号码,则返回true.资料来源:http://developer.android.com/reference/android/util/Patterns.html (2认同)
  • “……不是为了验证某物是否确实是电话号码。” (2认同)

Tej*_*oid 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();
        }

    }
Run Code Online (Sandbox Code Playgroud)

  • `public final static boolean isValidPhoneNumber(CharSequence phone){return phone!= null &&!(phone.length()<6 || phone.length()> 13)&& android.util.Patterns.PHONE.matcher(phone).火柴(); }` (2认同)
  • 不要单独使用PHONE模式:“此模式用于搜索看起来像是任意文本中的电话号码的内容,而不是用于验证某些内容实际上是否是电话号码。” (2认同)

Max*_*off 6

^\+?\(?[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
Run Code Online (Sandbox Code Playgroud)

在这里检查您的案例:https ://regex101.com/r/DuYT9f/1

  • 虽然这可以回答这个问题,但最好包含一些代码的上下文/解释,因为这使得它对未来的读者更有用。由于这个问题已经有一个被接受的答案和几个被投票的答案,您可能还想解释这个答案与其他答案的不同之处/改进之处。 (2认同)

ina*_*ruk 5

PhoneNumberUtils如果您的电话格式是所描述的格式之一,则可以使用.如果效用函数都不符合您的需求,请使用常规实验.