diff --git a/Course3/Lab4/validations.org b/Course3/Lab4/validations.org new file mode 100644 index 0000000000..4a4d18041d --- /dev/null +++ b/Course3/Lab4/validations.org @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +import re + +def validate_user(username, minlen): + """Checks if the received username matches the required conditions.""" + if type(username) != str: + raise TypeError("username must be a string") + if minlen < 1: + raise ValueError("minlen must be at least 1") + + # Usernames can't be shorter than minlen + if len(username) < minlen: + return False + # Usernames can only use letters, numbers, dots and underscores + if not re.match('^[a-z0-9._]*$', username): + return False + # Usernames can't begin with a number + if username[0].isnumeric(): + return False + return True + +print(validate_user("blue.kale", 3)) # True + +print(validate_user(".blue.kale", 3)) # Currently True, should be False + +print(validate_user("red_quinoa", 4)) # True + +print(validate_user("_red_quinoa", 4)) # Currently True, should be False + + diff --git a/Course3/Lab4/validations.py b/Course3/Lab4/validations.py index b18de65a2e..7117cc2c5f 100644 --- a/Course3/Lab4/validations.py +++ b/Course3/Lab4/validations.py @@ -3,22 +3,50 @@ import re def validate_user(username, minlen): + """Checks if the received username matches the required conditions.""" + if type(username) != str: + raise TypeError("username must be a string") + if minlen < 1: + raise ValueError("minlen must be at least 1") - + + # Usernames can't be shorter than minlen + if len(username) < minlen: + return False - # Usernames can only use letters, numbers, dots and underscores - if not re.match('^[a-z0-9._]*$', username): + + # Usernames can only use letters, numbers, dots and underscores, and cannot start with . or _ + + if not re.match('^[a-z0-9][a-z0-9._]*$', username): # Changed regex here + return False - # Usernames can't begin with a number + + # Usernames can't begin with a number (this check is now redundant but kept for clarity) + if username[0].isnumeric(): + return False + return True +print(validate_user("blue.kale", 3)) # True + +print(validate_user(".blue.kale", 3)) # Now False + +print(validate_user("red_quinoa", 4)) # True + +print(validate_user("_red_quinoa", 4)) # Now False + +print(validate_user("1red_quinoa", 4)) # False (still works) + +print(validate_user("!blue.kale", 3)) # False + +print(validate_user("bl?ue.kale", 3)) # False