diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index b6de408449..68790cec67 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -2563,14 +2563,30 @@ public boolean isNANPACountry(String regionCode) { * @param number the number that needs to be checked * @return true if the number is a valid vanity number */ + private static boolean hasAtLeastThreeAlphaChars(CharSequence number) { + int alphaCount = 0; + for (int i = 0; i < number.length(); i++) { + char c = number.charAt(i); + if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { + if (++alphaCount >= 3) { + return true; + } + } + } + return false; + } + public boolean isAlphaNumber(CharSequence number) { + if (number.length() > MAX_INPUT_STRING_LENGTH) { + return false; + } if (!isViablePhoneNumber(number)) { // Number is too short, or doesn't match the basic phone number pattern. return false; } StringBuilder strippedNumber = new StringBuilder(number); maybeStripExtension(strippedNumber); - return VALID_ALPHA_PHONE_PATTERN.matcher(strippedNumber).matches(); + return hasAtLeastThreeAlphaChars(strippedNumber); } /**