catamphetamine / libphonenumber-js

A simpler (and smaller) rewrite of Google Android's libphonenumber library in javascript
https://catamphetamine.gitlab.io/libphonenumber-js/
MIT License
2.77k stars 218 forks source link

FindPhoneNumbers in text only supports single extension #403

Open milliezhang-qinlan opened 3 years ago

milliezhang-qinlan commented 3 years ago

Steps to reproduce

Use findPhoneNumbersInText to find a phone number with multiple extensions, such as: US +16888888888,,9988776#,,654321#

Observed result

It can only detect the first extension, the other extensions are ignored.

Expected result

findPhoneNumbersInText should return multiple extensions information rather than only return the first extension.

catamphetamine commented 3 years ago

That's because Google's libphonenumber doesn't support that feature.

https://github.com/google/libphonenumber/blob/10c40f6a583d97318449b3204a26f917dc6e308e/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java#L260-L263

// Check for extra numbers at the end.
// TODO: This is the place to start when trying to support extraction of multiple phone number
// from split notations (+41 79 123 45 67 / 68).
candidate = trimAfterFirstMatch(PhoneNumberUtil.SECOND_NUMBER_START_PATTERN, candidate);
// Regular expression of characters typically used to start a second phone number for the purposes
// of parsing. This allows us to strip off parts of the number that are actually the start of
// another number, such as for: (530) 583-6985 x302/x2303 -> the second extension here makes this
// actually two phone numbers, (530) 583-6985 x302 and (530) 583-6985 x2303. We remove the second
// extension so that the first number is parsed correctly.
//
// Matches a slash (\ or /) followed by a space followed by an `x`.
//
const SECOND_NUMBER_START_PATTERN = /[\\/] *x/