2015-04-04 5 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

Вы, вероятно, лучше использовать Google, [ 'libphonenumber'] (https://github.com/ googlei18n/libphonenumber), чем пытаться сделать это самостоятельно. Также есть порт Python: ['python-phonenumbers'] (https://github.com/daviddrysdale/python-phonenumbers) –

+0

Это часть назначения Python при манипулировании строками, поэтому я ограничена этим. Благодарим вас за ваш вклад и не торопитесь комментировать. – Treece

ответ

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

+0

@Treece, каковы спецификации? –

+0

Здесь инструкции инструктора: напишите программу, в которой будет подтвержден правильный номер телефона. Пользователь вводит номер телефона, и программа проверяет, соответствует ли он требованиям, пропустив 3 теста по порядку (1), содержит ли он 12 символов (2), имеет ли он подгибы в надлежащих местах и ​​(3), если вы удаляете hypens все остальные цифры символов. Если номер телефона не прошел какие-либо тесты, он недействителен. Программа должна проверить правильность ввода номера телефона и сообщить об этом как действительный или недействительный. – Treece

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