我正在尝试在我的班级中为用户输入添加正则表达式检查。我想要一个用户在输入有效的电子邮件地址之前无法继续输入他们的名字的情况。我当前的代码没有按预期工作。
我想这里有一个while循环,但是我很难在这个类中实现它。非常感谢任何帮助。
class test:
def __init__(self):
self.email = input("Enter your email: ")
email_check = re.search(r'[\w.-]+@[\w.-]+.\w+', self.email)
if email_check:
print ('email valid')
else:
print ('email not valid')
self.email = input("Enter your email: ")
sys.exit(0)
self.name = input("Enter your name: ")
答案 0 :(得分:1)
你可以这样做。
while True:
self.email = input ("Enter email:")
if valid_email:
break
用您验证电子邮件地址的方式替换valid_email
。
您可能还会对Python check for valid email address?感兴趣的方法来验证电子邮件地址。
答案 1 :(得分:0)
首先 - 你不应该在__init__
方法中实现任何此类活动,因为一个用于初始化对象字段初始化。考虑专用的'check_email'方法,或者最适合的名称。
现在,关于你的情况:
class test:
def __init(self):
# whatever initialization applies
pass
def init_emails():
emails = []
proceed = True
# if you really in need of do/while loop
while proceed:
email = self.input_email()
# your logic for input
if email is not None:
emails.append(email)
# invalid input or cancel
else:
proceed = False
return input
def input_email(self):
value = input('Enter your email:')
# TODO: validate/check input
return proper_value
答案 2 :(得分:0)
class test:
def __init__(self):
self.email = self.get_name()
def get_name(self) :
while True:
x = input("Enter your email: ")
if (re.search(r'[\w.-]+@[\w.-]+.\w+', x)) :
return x
答案 3 :(得分:0)
此脚本的功能如上所述,最后打印名称和电子邮件。如果您需要使用python2.7,请使用raw_input
而不是input
。我使用for i in range
代替while True
来避免无限循环。
#!/usr/bin/env python3
import re
import sys
class Test(object):
def __init__(self):
self.email = None
self.name = None
def get_email(self):
for i in range(3):
email = input('Enter your email: ')
if re.search('[\w.-]+@[\w.-]+.\w+', email):
return email
print('Too many failed attempts!')
sys.exit(1)
def get_name(self):
for i in range(3):
name = input('Enter your name: ')
if name:
return name
print('Too many failed attempts!')
sys.exit(1)
def initialize(self):
self.email = self.get_email()
self.name = self.get_name()
print('"{}" <{}>'.format(self.name, self.email))
if __name__ == '__main__':
t = Test()
t.initialize()
答案 4 :(得分:0)
尝试使用raw_input而不是输入。像这样:
self.email = raw_input("Enter your email:")
不再有错误了。 希望这会有所帮助。