Go Regex
One day i was developing a project in Django and I was using the User model which is used for authenticating the user's to check if they have account or not, it's really an interesting model and the User model can create an object User it's an instance from class User which have attributes like username, password, firstname ,etc... and method like is_authenticated which is the most famous one for me to check if the user is authenticated or not(have an account)I think i will talk about Django User Model in elaboration in another post.
so to get to our topic which is regular expression(regex), i wondered how the Django User model when imported as a form to fill information about the user for example in a Signup Page, how an Application or Website is checking that the Email contains '@' or not and forcing that the username must be 6 character at-least and the Email must contain a '@' and '.com' or '.org' or any extension which is valid, the most inuititive way to do these verification is a trivial verification using nested if's and else to check if '@' is found in the email field or not and if the username is 6 characters or not.
the efficient and somehow less intuitive way to verify a given input is regular expressions, i read about regular expression in python but but i didn't understand it very will till i had a tutorial in it as part of theory of computation course the tutorial's topic was about regular expression in computational theory, regular expression(regex) is a symbols or characters used to define a schema for a certain function.
i will use regular expressions and regex interchangeably so we will use 0 for example to generate even numbers always which will have the following schema (00)0 whatever number given it will always generate an even number if the right most zero is 1 the number will be 2 if it's 0 it will be zero this also follows the schema for all even numbers which 2K so this a little taste about regex from the theory perspective now to the practical one.
GoLang has a library called regexp which is used to check if the values given by user is valid or not for example if i want the username to contain characters only and have a length of at-least 3 characters i will make the following regex [a-zA-Z]{3,} so let's explain it.
the a-zA-z it means the the username can contain uppercase or lower case in it from a to z or from A to Z in uppercase and the {} to specify the number of characters in the string so the character must have at-least 3 characters and at-most no limit so if the username expression was like this [a-zA-Z]{3,9} it means at-least 3 characters and at-most 9 characters.
i will provide a very small subset of common regular expression keywords this is not by any means a comprehensive list if you're interested to know more you will find link in the fun to read section
Keywords :-
: one or more appearance (it means there has to be at-least one character or number or whatever the hell) (0-9)+
0-9 : any number from 0 to 9
: zero or more appearance (it means it can be empty (epsilon)) example (0-9)*
$ : the expression should end with whatever before this sign for example if the expression ends with 0-9$ then it have to end with a number
a-z : any lower case character
A-Z : any upper case character
@ : it literally means the @ sign in the email to verify if this is an email or not
the following expression is used to verify the user inputs like username, email, password (Warning password regex is not very safe you should add a little expressions to it)
the code in Go :-
func Signupvalidation(username string, FirstName string, LastName string, Email string, password string)string {
usernamevalidation, _ := regexp.MatchString("[a-zA-Z0-9]{3,}",username)
FirstNamevalidation, _ := regexp.MatchString("[a-zA-Z0-9]{3,}",FirstName)
LastNamevalidation, _ := regexp.MatchString("[a-zA-Z0-9]{3,}",LastName)
EmailValidation, _ := regexp.MatchString("[1]+@[a-zA-Z0-9-]+[a-zA-Z0-9-.]+$",Email)
PasswordValidation, _ := regexp.MatchString("[a-zA-Z]{10,}",password)
if usernamevalidation != true {
return "userName is not valid"
}
if FirstNamevalidation != true {
return "First Name is not valid"
}
if LastNamevalidation != true{
return "Last Name is not valid"
}
if EmailValidation != true {
return "Email is not valid"
}
if PasswordValidation != true{
return "Password is not valid"
}
return "valid"
}
Hope you find this Article fruitful
full version of the code here :- https://github.com/12mohaned/Go_Lang_Libraries/blob/master/UserVerification.go
fun to read :-
https://docs.djangoproject.com/en/3.0/ref/contrib/auth/#django.contrib.auth.models.User.username
https://www.w3schools.com/python/python_regex.asp
a-zA-Z0-9_.+- ↩︎