5

我正在制定检查字符串(电子邮件)的算法 - 例如“电子邮件地址有效”,但它们是规则。电子邮件的第一部分必须是包含 1-8 个字符的字符串(可以包含字母、数字、下划线 [ _ ]...电子邮件包含的所有部分)并且在电子邮件的第二部分之后拥有 1-12 个字符的字符串(还包含所有合法表达式),并且必须以顶级域 .com 结尾

email = raw_input ("Enter the e-mail address:")
length = len (email)
if length > 20 
    print "Address is too long"
elif lenght < 7:
    print "Address is too short"  
if not email.endswith (".com"):   
    print "Address doesn't contain correct domain ending"   
try:
    first_part = len (splitting[0])
    second_part = len(splitting[1])  

    account = splitting[0]
    domain = splitting[1] 

    list = "abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."

    for c in account: 
        if c not in list:
            print "Invalid char", "->", c,"<-", "in account name of e-mail"

    for c in domain:
        if c not in list:
            print "Invalid char", "->", c,"<-", "in domain name of  e-mail"

    if first_part == 0:
        print "You need at least 1 character before the @"
    elif first_part> 8:
        print "The first part is too long"
    if second_part == 4:
        print "You need at least 1 character after the @"
    elif second_part> 16:
        print "The second part is too long"
except IndexError:
        print ""The address must consist of 2 parts connected with symbol @,\
 and ending must be .com"

    if first_part > 0 and first_part < 8 and second_part >4 and second_part < 16:
       print "Valid e-mail address"
4

3 回答 3

3

正则表达式FTW!

import re

address = 'test@gmail.com'
if re.match(r'^[a-z0-9_]{1,8}@[a-z0-9_]{1,8}\.com$', address, re.IGNORECASE):
  print 'valid'
else:
  print 'invalid'

一个较短的正则表达式(如注释所示)将是r'^\w{1,8}@\w{1,8}\.com$'

我不知道这是否是你老师的目标,但正则表达式总是很高兴知道:)

于 2012-06-15T22:06:42.067 回答
2

如果我理解得很好,除了查找无效字符的部分之外,您一切正常。真的吗?

你知道for循环吗?它可能对您有帮助。只需获取电子邮件的部分内容:

account = splitting[0]
domain = splitting[1]

然后,遍历每个部分。每次都会产生一个字符。如果此字符不在允许的字符集中,则打印一条消息:

for c in account:
    if c not in "abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.":
        print "Invalid char", c, "in e-mail"

for c in domain:
    if c not in "abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.":
        print "Invalid char", c, "in e-mail"

这不是一个非常优雅的解决方案(例如,可以使用代替,或列出综合),但我敢打赌,对于新用户来说,它已经足够理解了。string.ascii_letters+string.digits+"._""abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."

于 2012-06-15T21:08:16.970 回答
1

构造一个 validate email 方法,带有两个参数:要验证的电子邮件地址和一个有效域列表。

def validEmail(email, domains):

    length = len(email)

    index = email.find('@')

    if len(email[0:index]) <= 8 and len(email[0:index]) > 0:
        dot = email.find('.')
        if (len(email[index + 1:]) - dot) <= 12:
            if index+1==dot:
                return False
            else:
                for i in domains:
                    if email[dot + 1:] == i:
                        return True
    return False

domains = ['com', 'org', 'co.uk']

email = raw_input ("Enter the e-mail address:")
print validEmail(email, domains)
于 2012-06-15T20:37:31.093 回答