예제 #1
0
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)
예제 #2
0
파일: phone.py 프로젝트: tehmaze/natural
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)
예제 #3
0
파일: phone.py 프로젝트: mdamien/natural
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))))
예제 #4
0
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
예제 #5
0
파일: phone.py 프로젝트: tehmaze/natural
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
예제 #6
0
파일: phone.py 프로젝트: davidjb/natural
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