def e161(number, alphabet=PHONE_E161_ALPHABET): ''' Printable a 26 Latin letters (A to Z) phone number to the 12-key telephone keypad number. :param number: string :param alphabet: dict >>> e161('0800-PIZZA123') u'080074992123' >>> e161('0800^PIZZA123') Traceback (most recent call last): ... ValueError: Character "^" (0x5e) is not in the E.161 alphabet ''' digits = [] for char in strip(number, '+-. ()').lower(): length = len(digits) for group, digit in alphabet.iteritems(): if char in group: digits.append(digit) break if len(digits) == length: raise ValueError( _('Character "%s" (0x%02x) is not in the E.161 alphabet') % (char, ord(char))) return u''.join(digits)
def e161(number, alphabet=PHONE_E161_ALPHABET): ''' Printable a 26 Latin letters (A to Z) phone number to the 12-key telephone keypad number. :param number: string :param alphabet: dict >>> print(e161('0800-PIZZA123')) 080074992123 >>> e161('0800^PIZZA123') Traceback (most recent call last): ... ValueError: Character "^" (0x5e) is not in the E.161 alphabet ''' digits = [] for char in strip(number, '+-. ()').lower(): length = len(digits) for group, digit in alphabet.items(): if char in group: digits.append(digit) break if len(digits) == length: raise ValueError( _('Character "%s" (0x%02x) is not in the E.161 alphabet') % (char, ord(char)) ) return u''.join(digits)
def e123(number, areasize=3, groupsize=4, national=False): ''' Printable E.123 (Notation for national and international telephone numbers from ITU) numbers. :param number: string :param areasize: int :param groupsize: int :param national: bool >>> print(e123(155542315678)) +1 555 4231 5678 >>> print(e123('+31654231567', areasize=1)) +31 6 5423 1567 >>> print(e123('+3114020', areasize=2)) +31 14 020 >>> print(e123('+312054231567', areasize=2, national=True)) (020) 5423 1567 ''' if isinstance(number, six.integer_types): return e123('+%s' % number, areasize, groupsize) elif isinstance(number, six.string_types): number = strip(number, '-. ()') if number.startswith('+'): number = number[1:] if not number.isdigit(): raise ValueError(_('Invalid telephone number')) groups = [] prefix = '' remain = number if national: for x in six.moves.xrange(3, 0, -1): if number[:x] in PHONE_PREFIX: groups.append('(0%s)' % number[x:x + areasize]) remain = number[x + areasize:] break else: prefix = '+' for x in six.moves.xrange(3, 0, -1): if number[:x] in PHONE_PREFIX: groups.append(number[:x]) groups.append(number[x:x + areasize]) remain = number[x + areasize:] break for x in six.moves.xrange(0, len(remain) + 1, groupsize): groups.append(remain[x:x + groupsize]) return '%s%s' % (prefix, ' '.join(list(filter(None, groups))))
def e164(number): ''' Printable E.164 (The international public telecommunication numbering plan from ITU) numbers. :param number: string >>> e164(155542315678) u'+155542315678' >>> e164('+31 20 5423 1567') u'+312054231567' ''' if isinstance(number, six.integer_types): return e164('+%s' % number) elif isinstance(number, six.string_types): number = strip(number, '-. ()') if number.startswith('+'): number = number[1:] return u'+%s' % number
def e164(number): ''' Printable E.164 (The international public telecommunication numbering plan from ITU) numbers. :param number: string >>> print(e164(155542315678)) +155542315678 >>> print(e164('+31 20 5423 1567')) +312054231567 ''' if isinstance(number, six.integer_types): return e164('+%s' % number) elif isinstance(number, six.string_types): number = strip(number, '-. ()') if number.startswith('+'): number = number[1:] return u'+%s' % number
def e164(number): ''' Printable E.164 (The international public telecommunication numbering plan from ITU) numbers. :param number: string >>> e164(155542315678) u'+155542315678' >>> e164('+31 20 5423 1567') u'+312054231567' ''' if isinstance(number, (int, long)): return e164('+%s' % number) elif isinstance(number, basestring): number = strip(number, '-. ()') if number.startswith('+'): number = number[1:] return u'+%s' % number