Advertisement
Guest User

Untitled

a guest
Dec 4th, 2015
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. #!/usr/bin/env python3
  2.  
  3. import re
  4. from collections import Counter
  5.  
  6.  
  7. def email_check(email):
  8. if not type(email) is str:
  9. raise TypeError
  10.  
  11. domain = ''
  12. name = ''
  13.  
  14. # Splitting into name and domain
  15. dogrule = '^[a-z0-9"!,:._-]*@[a-z0-9_.-]+$'
  16. if re.search(dogrule, email):
  17. name, domain = email.split("@")
  18. else:
  19. return False
  20.  
  21. # Domain checking
  22. if len(domain) < 3 or len(domain) > 256:
  23. return False
  24.  
  25. blocks = domain.split(".")
  26.  
  27. for block in blocks:
  28. if len(block) == 0:
  29. return False
  30.  
  31. leftdashrule = '^[-][a-z0-9_-]*$'
  32. rightdashrule = '^[a-z0-9_-]*[-]$'
  33.  
  34. if re.search(leftdashrule, block) or re.search(rightdashrule, block):
  35. return False
  36.  
  37. # Username checking
  38. if len(name) > 128:
  39. return False
  40.  
  41. dotrule = '\.\.'
  42. if re.search(dotrule, name):
  43. return False
  44.  
  45. noquoterule = '^[a-z0-9._-]*$'
  46. inquoterule = '^[a-z0-9!,:._-]*$'
  47.  
  48. if '"' in name:
  49. if Counter(name)['"'] % 2 == 1:
  50. return False
  51. blocks = name.split('"')
  52. for i in range(len(blocks)):
  53. if i % 2 == 0 and not re.search(noquoterule, blocks[i]):
  54. return False
  55. if i % 2 == 1 and not re.search(inquoterule, blocks[i]):
  56. return False
  57. else:
  58. if not re.search(noquoterule, name):
  59. return False
  60.  
  61. return True
  62.  
  63. def main():
  64. correct = [
  65. 'zmalchunz@gmail.com',
  66. 'zm"a,l:c!h"unz@gmail.com',
  67. 'zverev_a_s@mail.ru',
  68. 'zve.rev_a_s@mail.ru',
  69. '@asdrgaerg-wae',
  70. ]
  71. incorrect = [
  72. 'zma"lchunz@gmail.com',
  73. 'zm"a,l:c!hunz@gmail.com',
  74. 'zm"a,l":c!hunz@gmail.com',
  75. 'zverev_a_s@.mail.ru',
  76. 'zverev_a_s@mail.ru.',
  77. 'zverev_a_s@mail..ru',
  78. 'zverev_a_s@-mail-.ru',
  79. 'zverev_a_s@-mail.ru',
  80. 'zverev_a_s@mail-.ru',
  81. 'zve..rev_a_s@mail.ru',
  82. 'aaregawerga',
  83. 'wsergwrg@sa',
  84. ]
  85. for mail in correct:
  86. email_check(mail)
  87.  
  88. for mail in incorrect:
  89. email_check(mail)
  90.  
  91. if __name__ == "__main__":
  92. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement