|
|
@@ -1,60 +1,78 @@
|
|
|
import { OperatorConfig } from 'src/operator_config/entities/operator-config.entiy'
|
|
|
+import { getCountryCode, getCountryData, getCountryDataList, getEmojiFlag } from 'countries-list'
|
|
|
+import type { ICountry, ICountryData, ILanguage, TContinentCode, TCountryCode, TLanguageCode } from 'countries-list'
|
|
|
+import CountryList from 'country-list-with-dial-code-and-flag'
|
|
|
|
|
|
export function checkAndFormatNumber(country: string, number: string, carrierName?: string) {
|
|
|
- if (/no service/i.test(carrierName) || /emergency calls only/i.test(carrierName) || /solo llamadas de emergencia/i.test(carrierName)) {
|
|
|
+ if (
|
|
|
+ /no service/i.test(carrierName) ||
|
|
|
+ /emergency calls only/i.test(carrierName) ||
|
|
|
+ /solo llamadas de emergencia/i.test(carrierName)
|
|
|
+ ) {
|
|
|
throw new Error('Error carrierName')
|
|
|
}
|
|
|
- switch (country.toLowerCase()) {
|
|
|
- case 'us':
|
|
|
- number = number.replace(/^\+1/, '').replace(/^1(\d{10})$/, '$1')
|
|
|
- if (!/^\d{10}$/.test(number)) {
|
|
|
- throw new Error('Invalid US number')
|
|
|
- }
|
|
|
- break
|
|
|
- case 'br':
|
|
|
- // 巴西,11位,12位去掉前导0
|
|
|
- if (number.length === 12 && number.charAt(0) === '0') {
|
|
|
- number = number.substring(1)
|
|
|
- }
|
|
|
- if (number.length == 13 && number.includes('55')) {
|
|
|
- number = number.substring(2)
|
|
|
- }
|
|
|
- if (!/^\d{11}$/.test(number)) {
|
|
|
- throw new Error('Invalid Brazilian number')
|
|
|
- }
|
|
|
- break
|
|
|
- case 'vn':
|
|
|
- number = number.replace(/^\+84/, '').replace(/^84(\d{9})$/, '$1')
|
|
|
- // 越南,号码为9位
|
|
|
- if (!/^\d{9}$/.test(number)) {
|
|
|
- throw new Error('Invalid Vietnamese number')
|
|
|
- }
|
|
|
- break
|
|
|
- case 'in':
|
|
|
- number = number.replace(/^\+91/, '').replace(/^91(\d{10})$/, '$1')
|
|
|
- // 印度,号码为10位
|
|
|
- if (!/^\d{10}$/.test(number)) {
|
|
|
- throw new Error('Invalid Indian number')
|
|
|
- }
|
|
|
- break
|
|
|
- case 'za':
|
|
|
- // 南非号码为9位
|
|
|
- number = number.replace(/^\+27/, '').replace(/^27(\d{9})$/, '$1')
|
|
|
- if (!/^\d{9}$/.test(number)) {
|
|
|
- throw new Error('Invalid South African number')
|
|
|
- }
|
|
|
- break
|
|
|
- // case 'tr':
|
|
|
- // number = number.replace(/^\+90/, '').replace(/^90(\d{10})$/, '$1')
|
|
|
- // if (!/^\d{10}$/.test(number)) {
|
|
|
- // throw new Error('Invalid Turkish number')
|
|
|
- // }
|
|
|
- // if (!/vodafone TR/i.test(carrierName)){
|
|
|
- // throw new Error('Turkish Error carrierName')
|
|
|
- // }
|
|
|
- // break
|
|
|
- default:
|
|
|
+ const countryData = CountryList.findOneByCountryCode(country.toUpperCase())
|
|
|
+
|
|
|
+ if (!countryData) {
|
|
|
+ throw new Error('Invalid country')
|
|
|
}
|
|
|
+ let regex = new RegExp(`^(\\+?)(${countryData.countryCode.replace('+', '')})`)
|
|
|
+ number = number.replace(regex, '')
|
|
|
+
|
|
|
+ // switch (country.toLowerCase()) {
|
|
|
+ // case 'us':
|
|
|
+ // number = number.replace(/^\+1/, '').replace(/^1(\d{10})$/, '$1')
|
|
|
+ // if (!/^\d{10}$/.test(number)) {
|
|
|
+ // throw new Error('Invalid US number')
|
|
|
+ // }
|
|
|
+ // break
|
|
|
+ // case 'br':
|
|
|
+ // // 巴西,11位,12位去掉前导0
|
|
|
+ // if (number.length === 12 && number.charAt(0) === '0') {
|
|
|
+ // number = number.substring(1)
|
|
|
+ // }
|
|
|
+ // if (number.length == 13 && number.includes('55')) {
|
|
|
+ // number = number.substring(2)
|
|
|
+ // }
|
|
|
+ // if (!/^\d{11}$/.test(number)) {
|
|
|
+ // throw new Error('Invalid Brazilian number')
|
|
|
+ // }
|
|
|
+ // break
|
|
|
+ // case 'vn':
|
|
|
+ // number = number.replace(/^\+84/, '').replace(/^84(\d{9})$/, '$1')
|
|
|
+ // // 越南,号码为9位
|
|
|
+ // if (!/^\d{9}$/.test(number)) {
|
|
|
+ // throw new Error('Invalid Vietnamese number')
|
|
|
+ // }
|
|
|
+ // break
|
|
|
+ // case 'in':
|
|
|
+ // number = number.replace(/^\+91/, '').replace(/^91(\d{10})$/, '$1')
|
|
|
+ // // 印度,号码为10位
|
|
|
+ // if (!/^\d{10}$/.test(number)) {
|
|
|
+ // throw new Error('Invalid Indian number')
|
|
|
+ // }
|
|
|
+ // break
|
|
|
+ // case 'za':
|
|
|
+ // // 南非号码为9位
|
|
|
+ // number = number.replace(/^\+27/, '').replace(/^27(\d{9})$/, '$1')
|
|
|
+ // if (!/^\d{9}$/.test(number)) {
|
|
|
+ // throw new Error('Invalid South African number')
|
|
|
+ // }
|
|
|
+ // break
|
|
|
+ // case 've':
|
|
|
+ // number = number.replace(/^\+/, '').replace(/^58/, '')
|
|
|
+ // break
|
|
|
+ // // case 'tr':
|
|
|
+ // // number = number.replace(/^\+90/, '').replace(/^90(\d{10})$/, '$1')
|
|
|
+ // // if (!/^\d{10}$/.test(number)) {
|
|
|
+ // // throw new Error('Invalid Turkish number')
|
|
|
+ // // }
|
|
|
+ // // if (!/vodafone TR/i.test(carrierName)){
|
|
|
+ // // throw new Error('Turkish Error carrierName')
|
|
|
+ // // }
|
|
|
+ // // break
|
|
|
+ // default:
|
|
|
+ // }
|
|
|
return number
|
|
|
}
|
|
|
|