2014-02-12 6 views
0

пользователь может ввести телефонный номер в любом из следующих форматов:Форматирование номер мобильного телефона в международном формате

  1. 07xxxxxxxxx

  2. 00447xxxxxxxxx

  3. 447xxxxxxxxx

  4. +447xxxxxxxxx

Мне нужна помощь в создании функции, которая примет номер в любом из вышеперечисленных форматов и вернет его как международный формат +447xxxxxxxxx.

Это то, что я до сих пор

def _clean_mobile(mobile): 

    import re 
    if re.match('^+44', mobile): 
     return mobile 
    elif re.match('^44', mobile): 
     return "+" + mobile 
+0

и вы застряли, потому что? – njzk2

+1

Извините, но предыдущие изменения были неправильными во всех отношениях. Предлагаемое редактирование сделало несколько шагов назад, без необходимости добавляя имя языка в заголовок в качестве префикса, когда вопрос уже был помечен и перемещен тег, специфичный для версии, в тело сообщения, а затем изменил упорядоченный список на неупорядоченный список видимая причина ... тогда рецензент снова представил опечатку, которая была исправлена ​​в более раннем редактировании! Я честно не могу понять, что люди иногда думают, когда редактируют или просматривают предложенные изменения. : | –

+0

@ njzk2, ну по нескольким причинам, я не уверен на 100%, если это лучший способ сделать это, и я уверен, что использование re.match вроде бы не поможет мне сказать, если в будущем я добавлю 0771 или что-то. – Prometheus

ответ

2

Рабочий пример: http://ideone.com/ErL7Y4

def standardizePhoneNumber(mobile): 
import re 
    valid_prefixes = '[+447|447|00447|07]' 
result = re.match('^' + valid_prefixes + '*([0-9]{9})$', mobile) 
if result: 
    return '+447' + result.group(1) 
else: 
    return None # invalid format 

print standardizePhoneNumber('07111111111') 
print standardizePhoneNumber('00447111111111') 
print standardizePhoneNumber('447111111111') 
print standardizePhoneNumber('+447111111111') 
print standardizePhoneNumber('456789456') 
2
import re 
FORMATS = ['^07', '^00447', '^447', '^\+447'] 
def sanitize(mobile): 
    mobile = re.sub('\s+', '', mobile) # strip whitespaces 
    for format in FORMATS: 
     if re.match(format, mobile): 
      return re.sub(format + '(\d{9})', '+447\g<1>', mobile) 
    return mobile 

sanitize('00447123456789') # +447123456789 
sanitize('07123456789')  # +447123456789 
sanitize('447123456789')  # +447123456789 
sanitize('+44 712 345 67 89')# +447123456789 
1

Вот, возможно, простое решение с использованием format метода Питона:

numbers= ['07345216342', '00447345216342', '447345216342', '+447345216342'] #input 
for i in numbers: 
    print '+447{0:0=9d}'.format(int(str(i)[-9:])) 

Outp ut:

+447345216342 
+447345216342 
+447345216342 
+447345216342 
Смежные вопросы