2014-02-12 72 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

下面是使用Python的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