Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- import re
- from collections import Counter
- def email_check(email):
- if not type(email) is str:
- raise TypeError
- domain = ''
- name = ''
- # Splitting into name and domain
- dogrule = '^[a-z0-9"!,:._-]*@[a-z0-9_.-]+$'
- if re.search(dogrule, email):
- name, domain = email.split("@")
- else:
- return False
- # Domain checking
- if len(domain) < 3 or len(domain) > 256:
- return False
- blocks = domain.split(".")
- for block in blocks:
- if len(block) == 0:
- return False
- leftdashrule = '^[-][a-z0-9_-]*$'
- rightdashrule = '^[a-z0-9_-]*[-]$'
- if re.search(leftdashrule, block) or re.search(rightdashrule, block):
- return False
- # Username checking
- if len(name) > 128:
- return False
- dotrule = '\.\.'
- if re.search(dotrule, name):
- return False
- noquoterule = '^[a-z0-9._-]*$'
- inquoterule = '^[a-z0-9!,:._-]*$'
- if '"' in name:
- if Counter(name)['"'] % 2 == 1:
- return False
- blocks = name.split('"')
- for i in range(len(blocks)):
- if i % 2 == 0 and not re.search(noquoterule, blocks[i]):
- return False
- if i % 2 == 1 and not re.search(inquoterule, blocks[i]):
- return False
- else:
- if not re.search(noquoterule, name):
- return False
- return True
- def main():
- correct = [
- 'zmalchunz@gmail.com',
- 'zm"a,l:c!h"unz@gmail.com',
- 'zverev_a_s@mail.ru',
- 'zve.rev_a_s@mail.ru',
- '@asdrgaerg-wae',
- ]
- incorrect = [
- 'zma"lchunz@gmail.com',
- 'zm"a,l:c!hunz@gmail.com',
- 'zm"a,l":c!hunz@gmail.com',
- 'zverev_a_s@.mail.ru',
- 'zverev_a_s@mail.ru.',
- 'zverev_a_s@mail..ru',
- 'zverev_a_s@-mail-.ru',
- 'zverev_a_s@-mail.ru',
- 'zverev_a_s@mail-.ru',
- 'zve..rev_a_s@mail.ru',
- 'aaregawerga',
- 'wsergwrg@sa',
- ]
- for mail in correct:
- email_check(mail)
- for mail in incorrect:
- email_check(mail)
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement