2015-04-04 30 views
1

以下是我迄今爲止的工作,雖然它沒有正常工作。任何改變建議表示讚賞。Python程序來驗證輸入的電話號碼是否正確

def get_telephone_number(areacode, prefix, number): 
    set1 = areacode[0:3] 
    set2 = prefix[0:3] 
    set3 = number[-3:] 

    telephone_number=set1 + '-' + set2 + '-' + set3 

    return get_telephone_number 


def valid_telephone_number(telephone_number): 
    correct_length = False 
    proper_hyphens = False 
    has_digits = False 

    if len(telephone_number) == 12: 
     correct_length = True 

    for ch in telephone_number: 
     if ch [3, 7] == '-': 
      proper_hypens = True 
     if ch.isdigit(): 
      has_digits = True 

    if correct_length and proper_hypens and has_digits: 
     is_valid = True 
    else: 
     is_valid = False 

    return is_valid 
########### 

import telephone_number 

def main(): 
    phone_number = input('Enter your telephone number: ') 

    while not phone_number.valid_telephone_number(telephone_number): 
     print('That number is invalid.') 
     phone_number = input('Enter your telephone number: ') 

    print('That is a valid entry.') 

main() 
+2

你可能會更好過使用谷歌的['libphonenumber'](https://github.com/ googlei18n/libphonenumber)比嘗試自己做這個。還有一個Python端口:['python-phonenumbers'](https://github.com/daviddrysdale/python-phonenumbers) – 2015-04-05 00:03:56

+0

它是操作字符串的Python任務的一部分,所以我現在僅限於此。感謝您的意見並花時間發表評論。 – Treece 2015-04-05 14:12:21

回答

2

不知道你想要的確切格式,但使用正則表達式可能會更容易些:

import re 
s ="043-4443-344" 
n = re.match("^\d+-\d+-\d+$",s) 
if n: 
    print(n.group()) 

"^\d+-\d+-\d+$"將匹配開始與一個或多個數字後跟一個連字符,一個或多個字符串數字後跟一個連字符並以一個或多個數字結尾。如果您希望允許使用特定數量的數字,例如^\d{3,5}可使區號長度在3-5位之間。

您的第一次檢查應該可能是if len(phone_number) != 12,因爲如果不是更進一步,沒有任何意義。

如果你想這樣做,沒有一個正則表達式,那麼你可以這樣做以下:

def valid_telephone_number(inp): 
    # make sure len is 12 and all char at index 3 and 7 are - 
    if not all(inp[x] == "-" for x in [3,7])and len(inp) == 12: 
     return False 
    # will be True if all that is left are digits after removing the - else False 
    return inp.replace("-", "", 3).isdigit() 



def main(): 
    while True: 
     phone_number = input('Enter your telephone number: ') 
     check = valid_telephone_number(phone_number) 
     # will be True for a valid num so return the formatted input 
     if check: 
      return check 
     # or else print message telling use the input was invalid and ask again 
     print('{} is a not valid entry, please try again.'.format(phone_number)) 
+0

謝謝!這是一個關於操作字符串的Python任務,所以我受到教師偏好的限制。感謝您花時間回覆有用的建議! – Treece 2015-04-05 14:14:50

+0

@Treece,規格是什麼? – 2015-04-05 15:24:30

+0

這是教師的指示:編寫一個程序,驗證電話號碼是否已正確輸入。用戶將輸入電話號碼,程序將檢查它是否符合要求,方法是按順序通過3個測試(1)是否包含12個字符(2)是否在適當的地方有超出部分,以及(3)如果刪除了超額部分,所有剩餘的字符數字。如果電話號碼未通過任何測試,則無效。程序應驗證輸入的電話號碼是否有效,並將其報告爲有效或無效。 – Treece 2015-04-05 19:42:54