Files
exercise-typescript/typescript/phone-number/phone-number.ts
2025-05-04 14:57:30 +02:00

34 lines
1.5 KiB
TypeScript

const hasLetters = (value: string) => Boolean(value.match(/[a-zA-Z]/))
const hasPunctuations = (value: string) => Boolean(value.match(/[^a-zA-Z0-9\(\)\-\ .+]/))
const getNumbersOnly = (value: string) => value.replace(/\D/g, '')
const parsePhoneNumber = (value: string) =>
(getNumbersOnly(value).match(/(\d{0,1})\ {0,1}(\d{3})(\d{7})$/) || []).slice(1)
export const clean = (phoneNumber: string): string => {
const [countryCode, areaCode, exchangeCode] = parsePhoneNumber(phoneNumber)
if (hasLetters(phoneNumber)) {
throw new Error('Letters not permitted')
} else if (hasPunctuations(phoneNumber)) {
throw new Error('Punctuations not permitted')
} else if (getNumbersOnly(phoneNumber).length > 11) {
throw new Error('More than 11 digits')
} else if (exchangeCode === undefined || areaCode === undefined) {
throw new Error('Incorrect number of digits')
} else if (countryCode && countryCode === '2') {
throw new Error('11 digits must start with 1')
} else if (countryCode && countryCode !== '1') {
throw new Error('More than 11 digits')
} else if (areaCode?.[0] === '0') {
throw new Error('Area code cannot start with zero')
} else if (areaCode?.[0] === '1') {
throw new Error('Area code cannot start with one')
} else if (exchangeCode === undefined || exchangeCode?.[0] === '0') {
throw new Error('Exchange code cannot start with zero')
} else if (exchangeCode?.[0] === '1') {
throw new Error('Exchange code cannot start with one')
}
return `${areaCode}${exchangeCode}`
}