Как повторно использовать модуль поиска на python

#python #python-3.x #re

#python #python-3.x #python-re

Вопрос:

В части моей программы мне нужно проверить введенное электронное письмо, и я хочу сделать так, чтобы любое доменное имя могло работать для проверки, текущий код, как показано ниже;

 import re #needed to check email
emailFormat = '^[a-z0-9] [._]?[a-z0-9] [@]w [.]w 

В настоящее время это будет работать для любого электронного письма в example@email.com но поскольку некоторые электронные письма находятся в форме example@email.co.uk итак, как я могу сделать 'emailFormat' действительным для любой доменной формы. Кроме того, проверка будет работать для электронных писем компании / школы, например, example@school.com или example@email.school просто все, что не содержит доменного имени, состоящего из двух частей, например 'co.uk "итак, мне понадобится другая переменная, чтобы проверить это, или это можно сделать одной командой.

Заранее спасибо за все полезное.


Комментарии:

1. как использовать регулярное выражение

2. re.match() подходит немного лучше.

Ответ №1:

вы можете использовать этот код и выбрать максимальное количество поддоменов. согласно этой ссылке, ограничение электронной почты составляет 255 байт, поэтому невозможно иметь более 120 поддоменов! попробуйте 30 поддоменов, я думаю, этого более чем достаточно.

 import re  # needed to check email

def CheckEmail(email):  # Validation for email
    '''
    Validation for Email

    input:
    email as "String"

    output: ( validation, Email Parts ) as tuple
    Validation as "String"
    Email Parts as if Valid as List, otherwise None
    '''

    # Can be decreased. The maximum is 125. according to the link below, the email limmitation is 255 bytes.
    subDomainCount = 30

    # This is a subdomain pattern
    subDomainPattern = r".?([w-] )?"

    # General form of email with maximum subDomainCount parameter
    pattern = r"([w.-] )@"   r"([w-] )"   (subDomainPattern * subDomainCount)   r".([w-] )"

    # Validation: True, False
    emailIsValid = re.search(pattern, email)

    # Conditional Statement
    if emailIsValid:

        # Condition multiple dots with no letters between them
        dotpattern = r"[.]{2}"
        if re.search(dotpattern,email):
            return "Invalid Email", None

        # Finding Email Parts (user   domains)
        emailParts = emailIsValid.groups()
        
        # removing empty subdomains
        emailParts = [x for x in emailParts if x is not None]
        
        return "Valid Email", emailParts
    else:
        return "Invalid Email", None



enteredEmail = input("Enter Email: ")
(validation, emailParts) = CheckEmail(enteredEmail)
print(validation)
print("Email Parts:",emailParts)
 

Терминал:

 Enter Email: test3475@website.acro.us
Valid Email
Email Parts: ['test3475', 'website', 'acro', 'us']
 
 Enter Email: test_third@mail.rop.qot.wkfc.org
Valid Email
Email Parts: ['test_third', 'mail', 'rop', 'qot', 'wkfc', 'org']
 
 Enter Email: testmega@mail..com
Invalid Email
Email Parts: None
 
 Enter Email: testbored@mail
Invalid Email
Email Parts: None
 

Вы можете изменить параметр subDomainCount, учитывая длину введенного пользователем электронного письма, но я думаю, что в этом нет необходимости.
если вы хотите узнать больше о модуле re, я сам узнал об этом из SoloLearn. (внутри курса Python3 вы можете найти модуль 9: Регулярные выражения.

Комментарии:

1. Возможно, это немного чрезмерно для того, чего мне нужно достичь, но все же очень ценится, особенно если я когда-нибудь вернусь и доработаю программу.

Ответ №2:

Это также будет работать с доменами two letters, а также с email.school.

 import re #needed to check email
emailFormat = r"(^[a-zA-Z0-9_. -] @[a-zA-Z0-9-] .[a-zA-Z0-9-.] $)"

def check(email):  #Validation for email
    if(re.search(emailFormat,email)): #pass expression and string in  search()
        return "Valid Email"
    else:
        return "Invalid Email"

enterEmail=str(input('enter email'))

print(check(enterEmail))
 

Дальнейшее чтение по вышеизложенному:- https://emailregex.com /

#general form of email

def check(email): #Validation for email
if(re.search(emailFormat,email)): #pass expression and string in search()
return "Valid Email"
else:
return "Invalid Email"

enterEmail=str(input('enter email'))

print(check(enterEmail))
В настоящее время это будет работать для любого электронного письма в example@email.com но поскольку некоторые электронные письма находятся в форме example@email.co.uk итак, как я могу сделать ’emailFormat’ действительным для любой доменной формы. Кроме того, проверка будет работать для электронных писем компании / школы, например, example@school.com или example@email.school просто все, что не содержит доменного имени, состоящего из двух частей, например ‘co.uk «итак, мне понадобится другая переменная, чтобы проверить это, или это можно сделать одной командой.

Заранее спасибо за все полезное.

Комментарии:

1. как использовать регулярное выражение

2. re.match() подходит немного лучше.

Ответ №1:

вы можете использовать этот код и выбрать максимальное количество поддоменов. согласно этой ссылке, ограничение электронной почты составляет 255 байт, поэтому невозможно иметь более 120 поддоменов! попробуйте 30 поддоменов, я думаю, этого более чем достаточно.


Терминал:





Вы можете изменить параметр subDomainCount, учитывая длину введенного пользователем электронного письма, но я думаю, что в этом нет необходимости.
если вы хотите узнать больше о модуле re, я сам узнал об этом из SoloLearn. (внутри курса Python3 вы можете найти модуль 9: Регулярные выражения.

Комментарии:

1. Возможно, это немного чрезмерно для того, чего мне нужно достичь, но все же очень ценится, особенно если я когда-нибудь вернусь и доработаю программу.

Ответ №2:

Это также будет работать с доменами two letters, а также с email.school.


Дальнейшее чтение по вышеизложенному:- https://emailregex.com /