5

文字列(メール)をチェックするためのアルゴリズムを作成しています-「メールアドレスは有効です」などですが、それらはルールです。電子メールの最初の部分は、1 ~ 8 文字の文字列 (アルファベット、数字、アンダースコア [ _ ]...電子メールに含まれるすべての部分を含むことができます) である必要があり、@ の後、電子メールの 2 番目の部分は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"

これは非常に洗練されたソリューションではありません (たとえば、 やlist comprehesionsの代わりに使用できます) が、新しいユーザーにとっては十分に理解できると思います。string.ascii_letters+string.digits+"._""abcdefghijklmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_."

于 2012-06-15T21:08:16.970 に答える
1

検証する電子メール アドレスと有効なドメインのリストの 2 つのパラメータを使用して、検証電子メール メソッドを作成します。

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 に答える