123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- export default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {
- if (number && metadata.numberingPlan.nationalPrefixForParsing()) {
-
-
-
- const prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')')
- const prefixMatch = prefixPattern.exec(number)
- if (prefixMatch) {
- let nationalNumber
- let carrierCode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- const capturedGroupsCount = prefixMatch.length - 1
- const hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount]
- if (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {
- nationalNumber = number.replace(
- prefixPattern,
- metadata.nationalPrefixTransformRule()
- )
-
-
- if (capturedGroupsCount > 1) {
- carrierCode = prefixMatch[1]
- }
- }
-
-
-
-
-
-
- else {
-
-
-
-
-
- const prefixBeforeNationalNumber = prefixMatch[0]
- nationalNumber = number.slice(prefixBeforeNationalNumber.length)
-
-
- if (hasCapturedGroups) {
- carrierCode = prefixMatch[1]
- }
- }
-
-
-
-
-
- let nationalPrefix
- if (hasCapturedGroups) {
- const possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1])
- const possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup)
-
-
-
-
-
-
- if (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {
- nationalPrefix = metadata.numberingPlan.nationalPrefix()
- }
- } else {
- nationalPrefix = prefixMatch[0]
- }
- return {
- nationalNumber,
- nationalPrefix,
- carrierCode
- }
- }
- }
- return {
- nationalNumber: number
- }
- }
|