12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // These mappings map a character (key) to a specific digit that should
- // replace it for normalization purposes. Non-European digits that
- // may be used in phone numbers are mapped to a European equivalent.
- //
- // E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
- //
- export const DIGITS = {
- '0': '0',
- '1': '1',
- '2': '2',
- '3': '3',
- '4': '4',
- '5': '5',
- '6': '6',
- '7': '7',
- '8': '8',
- '9': '9',
- '\uFF10': '0', // Fullwidth digit 0
- '\uFF11': '1', // Fullwidth digit 1
- '\uFF12': '2', // Fullwidth digit 2
- '\uFF13': '3', // Fullwidth digit 3
- '\uFF14': '4', // Fullwidth digit 4
- '\uFF15': '5', // Fullwidth digit 5
- '\uFF16': '6', // Fullwidth digit 6
- '\uFF17': '7', // Fullwidth digit 7
- '\uFF18': '8', // Fullwidth digit 8
- '\uFF19': '9', // Fullwidth digit 9
- '\u0660': '0', // Arabic-indic digit 0
- '\u0661': '1', // Arabic-indic digit 1
- '\u0662': '2', // Arabic-indic digit 2
- '\u0663': '3', // Arabic-indic digit 3
- '\u0664': '4', // Arabic-indic digit 4
- '\u0665': '5', // Arabic-indic digit 5
- '\u0666': '6', // Arabic-indic digit 6
- '\u0667': '7', // Arabic-indic digit 7
- '\u0668': '8', // Arabic-indic digit 8
- '\u0669': '9', // Arabic-indic digit 9
- '\u06F0': '0', // Eastern-Arabic digit 0
- '\u06F1': '1', // Eastern-Arabic digit 1
- '\u06F2': '2', // Eastern-Arabic digit 2
- '\u06F3': '3', // Eastern-Arabic digit 3
- '\u06F4': '4', // Eastern-Arabic digit 4
- '\u06F5': '5', // Eastern-Arabic digit 5
- '\u06F6': '6', // Eastern-Arabic digit 6
- '\u06F7': '7', // Eastern-Arabic digit 7
- '\u06F8': '8', // Eastern-Arabic digit 8
- '\u06F9': '9' // Eastern-Arabic digit 9
- }
- export function parseDigit(character) {
- return DIGITS[character]
- }
- /**
- * Parses phone number digits from a string.
- * Drops all punctuation leaving only digits.
- * Also converts wide-ascii and arabic-indic numerals to conventional numerals.
- * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
- * @param {string} string
- * @return {string}
- * @example
- * ```js
- * parseDigits('8 (800) 555')
- * // Outputs '8800555'.
- * ```
- */
- export default function parseDigits(string) {
- let result = ''
- // Using `.split('')` here instead of normal `for ... of`
- // because the importing application doesn't neccessarily include an ES6 polyfill.
- // The `.split('')` approach discards "exotic" UTF-8 characters
- // (the ones consisting of four bytes) but digits
- // (including non-European ones) don't fall into that range
- // so such "exotic" characters would be discarded anyway.
- for (const character of string.split('')) {
- const digit = parseDigit(character)
- if (digit) {
- result += digit
- }
- }
- return result
- }
|