github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume4/section2/gopherface/validationkit/validationkit.go (about) 1 package validationkit 2 3 import ( 4 "log" 5 "math/rand" 6 "regexp" 7 "time" 8 ) 9 10 const UsernameRegex string = `^@?(\w){1,15}$` 11 const EmailRegex = `(?i)^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})+$` 12 13 func CheckUsernameSyntax(username string) bool { 14 15 validationResult := false 16 r, err := regexp.Compile(UsernameRegex) 17 if err != nil { 18 log.Fatal(err) 19 } 20 validationResult = r.MatchString(username) 21 return validationResult 22 } 23 24 func CheckEmailSyntax(email string) bool { 25 validationResult := false 26 r, err := regexp.Compile(EmailRegex) 27 if err != nil { 28 log.Fatal(err) 29 } 30 validationResult = r.MatchString(email) 31 return validationResult 32 } 33 34 func GenerateRandomUsername() string { 35 36 rand.Seed(time.Now().UnixNano()) 37 38 usernameLength := rand.Intn(15) + 1 39 40 var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_") 41 b := make([]rune, usernameLength) 42 for i := range b { 43 b[i] = letterRunes[rand.Intn(len(letterRunes))] 44 } 45 randomUsername := string(b) 46 47 zeroOrOne := rand.Intn(2) 48 if zeroOrOne == 1 { 49 randomUsername = "@" + randomUsername 50 } 51 return randomUsername 52 }