#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 /