github.com/EngineerKamesh/gofullstack@v0.0.0-20180609171605-d41341d7d4ee/volume2/section3/gopherfaceform/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  }