You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					30 lines
				
				1.1 KiB
			
		
		
			
		
	
	
					30 lines
				
				1.1 KiB
			| 
											3 years ago
										 | import Metadata from '../metadata.js' | ||
|  | import { VALID_DIGITS } from '../constants.js' | ||
|  | 
 | ||
|  | const CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])') | ||
|  | 
 | ||
|  | export default function stripIddPrefix(number, country, callingCode, metadata) { | ||
|  | 	if (!country) { | ||
|  | 		return | ||
|  | 	} | ||
|  | 	// Check if the number is IDD-prefixed.
 | ||
|  | 	const countryMetadata = new Metadata(metadata) | ||
|  | 	countryMetadata.selectNumberingPlan(country, callingCode) | ||
|  | 	const IDDPrefixPattern = new RegExp(countryMetadata.IDDPrefix()) | ||
|  | 	if (number.search(IDDPrefixPattern) !== 0) { | ||
|  | 		return | ||
|  | 	} | ||
|  | 	// Strip IDD prefix.
 | ||
|  | 	number = number.slice(number.match(IDDPrefixPattern)[0].length) | ||
|  | 	// If there're any digits after an IDD prefix,
 | ||
|  | 	// then those digits are a country calling code.
 | ||
|  | 	// Since no country code starts with a `0`,
 | ||
|  | 	// the code below validates that the next digit (if present) is not `0`.
 | ||
|  | 	const matchedGroups = number.match(CAPTURING_DIGIT_PATTERN) | ||
|  | 	if (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) { | ||
|  | 		if (matchedGroups[1] === '0') { | ||
|  | 			return | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return number | ||
|  | } |