-
findNumbers()
,searchNumbers()
,PhoneNumberMatcher
don't throw "Unknown country" error anymore: a non-existent country is simply ignored instead. Same goes forgetExampleNumber()
andgetExtPrefix()
. -
parsePhoneNumberFromString()
doesn't returnundefined
if a non-existent default country is passed: it simply ignores such country instead and still parses international numbers. -
Added
isSupportedCountry(country)
function. -
Added CDN bundles for
min
/max
/mobile
sub-packages. -
Moved demo to
max
metadata (wasmin
previously). -
Added TypeScript definitions for
min
/max
/mobile
/core
sub-packages.
-
Added
/min
,/max
,/mobile
and/custom
subpackages pre-wired with different flavors of metadata. See the relevant readme section for more info. -
Added
parsePhoneNumberFromString()
function (which doesn't throw but instead returnsundefined
).
- Refactored the code to remove cyclic dependencies which caused warnings on React Native. It's not a breaking change but it's still a big code diff overall so incremented the "minor" version number.
- Support Russian extension character "доб" as a valid one while parsing the numbers.
- Added
.getNumber()
method toAsYouType
formatter instance. Returns aPhoneNumber
.
-
Added
parsePhoneNumber()
function andPhoneNumber
class. -
Added
v2: true
option tofindNumbers()
function. -
Added
getExampleNumber()
function. -
Added
isPossibleNumber()
function. -
In
formatNumber()
renamedNational
toNATIONAL
andInternational
toINTERNATIONAL
. The older variants still work but are considered deprecated. -
(metadata file internal format breaking change) (doesn't affect users of this library) If anyone was using metadata files from this library bypassing the library functions (i.e. those who parsed
metadata.min.json
file manually) then there's a new internal optimization introduced in this version: previouslyformats
were copy-pasted for each country of the same region (e.g.NANPA
) while now theformats
are only defined on the "main" country for region and other countries simply read theformats
from it at runtime. This reduced the default metadata file size by 5 kilobytes.
- Deprecated
findPhoneNumbers()
,searchPhoneNumbers()
andPhoneNumberSearch
. UsefindNumbers()
,searchNumbers()
andPhoneNumberMatcher
instead. The now-deprecated functions were a half-self-made implementation of Google's JavafindNumbers()
until the Java code was ported into javascript and passed tests. The port of Google's Java implementation is supposed to find numbers more correctly. It hasn't been tested by users in production yet, but the same tests as for the previous implementation offindPhoneNumbers()
pass, so seems that it can be used in production.
- Fixed
formatNumber('NATIONAL')
not formatting national phone numbers with a national prefix when it's marked as optional (e.g. Russia). Before it didn't add national prefix when formatting national numbers if national prefix was marked as optional. Now it always adds national prefix when formatting national numbers even when national prefix is marked as optional.
- A bug in
matches_entirely
was found by a user which resulted in incorrect regexp matching in some cases, e.g. when there was a|
in a regexp. This could cause incorrectparseNumber()
results, or any other weird behaviour.
-
Changed the output of
AsYouType
formatter. E.g. before forUS
and input21
it was outputting(21 )
which is not good for phone number input (not intuitive and is confusing). Now it will not add closing braces which haven't been reached yet by the input cursor and it will also strip the corresponding opening braces, so forUS
and input21
it now is just21
, and for213
it is(213)
. -
(could be a breaking change for those who somehow used
.template
property of anAsYouType
instance) Due to the change inAsYouType
formatting the.template
property no longer strictly corresponds to the output, e.g. forUS
and input21
the output is now21
but the.template
is still(xxx) xxx-xxxx
like it used to be in the older versions when the output was(21 )
. Therefore, a new function has been added toAsYouType
instance called.getTemplate()
which will return the partial template for the currently input value, so for input21
the output will be21
and.getTemplate()
will returnxx
, and for input213
the output will be(213)
and.getTemplate()
will return(xxx)
. So there is this difference between the new.getTemplate()
function and the old.template
property: the old.template
property always returns the template for a fully entered phone number and the new.getTemplate()
function always returns the template for the partially entered phone number, i.e. for the partially entered number(213) 45
it will return template(xxx) xx
so it's a one-to-one correspondence now.
-
Fixed
parseNumber()
,isValidNumber()
andgetNumberType()
in some rare cases (made them a bit less strict where it fits): previously they were treatingdefaultCountry
argument as "the country" in case of local numbers, e.g.isValidNumber('07624 369230', 'GB')
would befalse
because07624 369230
number belongs toIM
(the Isle of Man). WhileIM
is notGB
it should still betrue
becauseGB
is the default country, without it necessarily being the country. -
Added a new function
isValidNumberForRegion(number, country)
which mimics Google'slibphonenumber
's one.
- Fixed a previously unnoticed bug regarding parsing RFC3966 phone URIs: previously
:
was mistakenly being considered a key-value separator instead of=
. E.g. it was parsing RFC3966 phone numbers astel:+78005553535;ext:123
instead oftel:+78005553535;ext=123
. The bug was found and reported by @cdunn.
- Removed
parseNumber()
'sfromCountry
parameter used for parsing IDD prefixes: now it usesdefaultCountry
instead.formatNumber()
'sfromCountry
parameter stays and is not removed.
- Optimized metadata a bit: using
0
instead ofnull
/false
and1
instead oftrue
.
- Added support for IDD prefixes —
parse()
now parses IDD-prefixed phones iffromCountry
option is passed,format()
now has anIDD
format.
-
Added
parseNumber()
andformatNumber()
aliases forparse()
andformat()
. Now these are the default ones, andparse()
andformat()
names are considered deprecated. The rationale is thatparse()
andformat()
function names are too unspecific and can clash with other functions declared in a javascript file. And also searching in a project forparseNumber
andformatNumber
is easier than searching in a project forparse
andformat
. -
Fixed
parseRFC3966()
andformatRFC3966()
non-custom exports.
parse()
is now more forgiving when parsing invalid international numbers. E.g.parse('+49(0)15123020522', 'DE')
doesn't return{}
and instead removes the invalid(0)
national prefix from the number.
- Added
PhoneNumberSearch
class for asynchronous phone number search.
- Added
findPhoneNumbers
function.
- Added
parseRFC3966
andformatRFC3966
functions which are exported.
- Fixed custom metadata backwards compatibility bug introduced in
1.0.16
. All people who previously installed1.0.16
or1.0.17
should update. - Refactored metadata module which now supports versioning by adding the
version
property to metadata JSON.
- Fixed
RFC3966
format not prependingtel:
to the output. - Renamed
{ possible: true }
option to{ extended: true }
and the result is now more verbose (see the README). - Added
possible_lengths
property in metadata: metadata generated using previous versions of the library should be re-generated with then new version.
- (experimental) Added
{ possible: true }
option forparse()
for parsing "possible numbers" which are not considered valid (like Google's demo does). E.g.parse('+71111111111', { possible: true }) === { countryCallingCode: '7', phone: '1111111111', possible: true }
andformat({ countryCallingCode: '7', phone: '1111111111' }, 'E.164') === '+71111111111'
. getPhoneCode
name is deprecated, usegetCountryCallingCode
instead.getPhoneCodeCustom
name is deprecated, usegetCountryCallingCodeCustom
instead.AsYouType.country_phone_code
renamed toAsYouType.countryCallingCode
(but no one should have used that property).
- If
country: string
argument is passed toparse()
now it becomes "the default country" rather than "restrict to country" ("restrict to country" option is gone). parse()
options
argument changed: it's now an undocumented feature and can have only a single option inside —defaultCountry: string
— which should be passed as a string argument instead.- Removed all previously deprecated stuff: all underscored exports (
is_valid_number
,get_number_type
andas_you_type
), lowercase exports forasYouType
andasYouTypeCustom
(useAsYouType
andAsYouTypeCustom
instead),"International_plaintext"
format (use"E.164"
instead). - Integer phone numbers no longer get automatically converted to strings.
parse()
,isValidNumber()
,getNumberType()
andformat()
no longer acceptundefined
phone number argument: it must be either a string or a parsed number object having a stringphone
property.
- Added
formatExtension(number, extension)
option toformat()
- Added support for phone number extensions.
asYouType
name is deprecated, useAsYouType
instead (same goes forasYouTypeCustom
).is_valid_number
,get_number_type
andas_you_type
names are deprecated, use camelCased names instead.International_plaintext
format is deprecated, useE.164
instead.- Added
RFC3966
format for phone number URIs (tel:+1213334455;ext=123
).
- Added missing
getNumberTypeCustom
es6 export
- Removed
.valid
from "as you type" formatter because it wasn't reliable (gave false negatives). UseisValidNumber(value)
for phone number validation instead.
- Fixed a bug when "as you type" formatter incorrectly formatted the input using non-matching phone number formats
- Loosened national prefix requirement when parsing (fixed certain Brazilian phone numbers parsing)
- Added more strict validation to
isValidNumber
- Fixed CommonJS export for
getNumberType
- Now exporting
getNumberType
function
- Removed
libphonenumber-js/custom.es6
exported file: now everything should be imported from the root package in ES6-capable bundlers (because tree-shaking actually works that way) - Now custom functions like
parse
,format
andisValidNumber
are not bound to custom metadata: it's passed as the last argument instead. And customasYouType
is now not a function — instead,asYouType
constructor takes an additionalmetadata
argument
- Fixed
update-metadata
utility
- Added national prefix check for
parse
andisPhoneValid
- A bit more precise
valid
flag for "as you type" formatter
- Added metadata update
bin
command for end users (see README) - Added the ability to include extra regular expressions for finer-grained phone number validation
- Added the ability to use custom-countries generated metadata as a parameter for the functions exported from this library
- Small fix for "as you type" to not prepend national prefix to the number being typed
- Reset
default_country
for "as you type" if the input is an international phone number
- (misc) Small fix for
format()
when the national number isundefined
- Better "as you type" matching: when the national prefix is optional it now tries both variants — with the national prefix extracted and without
- Exporting
metadata
andgetPhoneCode()
- Fixed a minor bug in "as you type" when a local phone number without national prefix got formatted with the national prefix
- Fixed a bug when country couldn't be parsed from a phone number in most cases
- Added
.country_phone_code
readable property to "as you type" formatter
- "As you type" formatter's
country_code
argument is nowdefault_country_code
, and it doesn't restrict to the specified country anymore.
- "As you type" formatter
template
fix for national prefixes (which weren't replaced withx
-es)
- "As you type" formatter now formats the whole input passed to the
.input()
function one at a time without splitting it into individual characters (which yields better performance)
- Added
valid
,country
andtemplate
fields to "as you type" instance
- Managed to reduce metadata size by another 5 KiloBytes removing redundant (duplicate) phone number type regular expressions (because there's no "get phone type" API in this library).
- Managed to reduce metadata size by 10 KiloBytes removing phone number type regular expressions when
leading_digits
are present.
- Turned out those numerous bulky regular expressions (
<fixedLine/>
,<mobile/>
, etc) are actually required to reliably infer country from country calling code and national phone number in cases where there are multiple countries assigned to the same country phone code (e.g. NANPA), so I've included those big regular expressions for those ambiguous cases which increased metadata size by 20 KiloBytes resulting in a total of 90 KiloBytes for the metadata.
- Small fix for "as you type" formatter: replacing digit placeholders (punctuation spaces) with regular spaces in the output
- Fixed a bug when national prefix
1
was present in "as you type" formatter for NANPA countries (while it shouldn't have been present)
- (may be a breaking change) renamed
.clear()
to.reset()
for "as you type" formatter
- Better
asYouType
(better than Google's original "as you type" formatter)
- Added
asYouType
andisValidNumber
.
- Added
format
function.
- Initial release.
parse
function is working.