我需要验证国际电话号码的用户输入。根据E.164,最大长度为 15 位,但我无法找到有关最小值的任何信息。我只考虑数字,没有加号或分隔符。
3 回答
根据不同的来源,我认为 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
.
Saint Helena(格式:+290 XXXX)和纽埃(格式:+683 XXXX)的最小长度为 4。
编辑 2015-06-27:最小值实际上是 8,包括国家代码。我的错。
原帖
我使用的最小电话号码是 10 位数。国际用户应该总是输入他们的国家代码,据我所知,如果算上国家代码,没有少于十位数的国家。
更多信息:https ://en.wikipedia.org/wiki/Telephone_numbering_plan