174

我需要验证国际电话号码的用户输入。根据E.164,最大长度为 15 位,但我无法找到有关最小值的任何信息。我只考虑数字,没有加号或分隔符。

4

3 回答 3

138

根据不同的来源,我认为 E-164 格式的最小长度取决于国家/地区。例如:

  • 对于以色列:最小电话号码长度(不包括国家代码)为 8 位。-官方来源 (国家代码 972)
  • 对于瑞典:最小号码长度(不包括国家代码)为 7 位数字。-官方来源‎(国家代码 46)

  • 对于所罗门群岛,其 5 用于固定电话。-来源(国家代码 677)

... 等等。因此,包括国家代码在内,瑞典的最小长度为 9 位,以色列为 11 位,所罗门群岛为 8 位。

编辑(干净的解决方案):实际上,您可以使用谷歌的libphonenumber,而不是通过不同的检查(如长度等)来验证国际电话号码。它可以直接验证E164格式的电话号码。它将考虑所有因素,如果号码是有效的 E164 格式,您甚至不需要提供国家/地区。这个很不错!举个例子:

String phoneNumberE164Format = "+14167129018"
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try {
    PhoneNumber phoneNumberProto = phoneUtil.parse(phoneNumberE164Format, null);
    boolean isValid = phoneUtil.isValidNumber(phoneNumberProto); // returns true if valid
    if (isValid) {
        // Actions to perform if the number is valid
    } else {
        // Do necessary actions if its not valid 
    }
} catch (NumberParseException e) {
    System.err.println("NumberParseException was thrown: " + e.toString());
}

如果您知道要验证数字的国家/地区,您甚至不需要 E164 格式,并且可以在.parse函数中指定国家/地区而不是传递null.

于 2013-07-23T15:17:42.563 回答
21

Saint Helena(格式:+290 XXXX)和纽埃(格式:+683 XXXX)的最小长度为 4。

于 2017-05-16T06:03:56.133 回答
16

编辑 2015-06-27:最小值实际上是 8,包括国家代码。我的错。

原帖

我使用的最小电话号码是 10 位数。国际用户应该总是输入他们的国家代码,据我所知,如果算上国家代码,没有少于十位数的国家。

更多信息:https ://en.wikipedia.org/wiki/Telephone_numbering_plan

于 2013-07-18T21:40:45.410 回答