def _validate(localpart): stream = TokenStream(localpart) # get the hotmail base mpart = stream.get_token(HOTMAIL_BASE) if mpart is None: return False # optional tags tgs = _tags(stream) if not stream.end_of_stream(): return False return True
def _validate(localpart): stream = TokenStream(localpart) # get the google base mpart = stream.get_token(GOOGLE_BASE) if mpart is None: return False # optional tags tgs = _tags(stream) if not stream.end_of_stream(): return False return True
def _validate_disposable(email_addr): # Setup for handling EmailAddress type instead of literal string localpart = email_addr.mailbox managed = managed_email(email_addr.hostname) # length check (base + hyphen + keyword) l = len(localpart) if l < 3 or l > 65: return False # single hyphen if localpart.count('-') != 1: return False # base and keyword length limit parts = localpart.split('-') for part in parts: l = len(part) if l < 1 or l > 32: return False # Grammar: local-part -> alpha { [ alpha | num | underscore ] } hyphen { [ alpha | num ] } stream = TokenStream(localpart) # must being with alpha begin = stream.get_token(ALPHA) if begin is None and managed: return False while True: # alpha, num, underscore base = stream.get_token(ALPHANUM) or stream.get_token(UNDERSCORE) if base is None: break # hyphen hyphen = stream.get_token(HYPHEN) if hyphen is None: return False # keyword must be alpha, num stream.get_token(ALPHANUM) if not stream.end_of_stream(): return False return True
def _validate(localpart): stream = TokenStream(localpart) while True: # get alphanumeric portion mpart = stream.get_token(ALPHANUM) if mpart is None: return False # get optional dot, must be followed by more alphanumerics mpart = stream.get_token(DOT) if mpart is None: break # optional tags tgs = _tags(stream) if not stream.end_of_stream(): return False return True
def _validate(localpart): "Grammar: local-part -> alpha { [ dot | underscore ] ( alpha | num ) }" stream = TokenStream(localpart) # local-part must being with alpha alpa = stream.get_token(ALPHA) if alpa is None: return False while True: # optional dot or underscore token stream.get_token(DOT) or stream.get_token(UNDERSCORE) # alpha or numeric alpanum = stream.get_token(ALPHA) or stream.get_token(NUMERIC) if alpanum is None: break # alpha or numeric must be end of stream if not stream.end_of_stream(): return False return True
def _validate(localpart): stream = TokenStream(localpart) # localpart must start with alpha alpa = stream.get_token(ALPHA) if alpa is None: return False while True: # optional dot or underscore stream.get_token(DOT) or stream.get_token(UNDERSCORE) base = stream.get_token(ICLOUD_BASE) if base is None: break if not stream.end_of_stream(): return False return True
def _validate_primary(email_addr): # Setup for handling EmailAddress type instead of literal string localpart = email_addr.mailbox managed = managed_email(email_addr.hostname) # length check l = len(localpart) if l < 4 or l > 32: return False # no more than one dot (.) if localpart.count('.') > 1: return False # Grammar: local-part -> alpha { [ dot | underscore ] ( alpha | num ) }" stream = TokenStream(localpart) # local-part must being with alpha alpa = stream.get_token(ALPHA) if alpa is None and managed: return False while True: # optional dot or underscore token stream.get_token(DOT) or stream.get_token(UNDERSCORE) # alpha or numeric alpanum = stream.get_token(ALPHA) or stream.get_token(NUMERIC) if alpanum is None: break # alpha or numeric must be end of stream if not stream.end_of_stream(): return False return True