Skip to content

How to Check Password Complexity in Golang ?

CheckPasswordComplexity validates if a password meets the complexity requirements.

The password must contain at least 8 characters and include at least one number, one lowercase letter, one uppercase letter, and one symbol. It returns an error if the password does not meet these requirements.

Parameters:

  • password: string, the password to be validated.

Returns:

  • error: an error if the password does not meet the complexity requirements, or nil if the password meets the requirements.
func CheckPasswordComplexity(password string) error {
	// Check if the password is at least 8 characters long
	if len(password) < 8 {
		return fmt.Errorf("password should contain at least 8 characters")
	}

	// Check if the password contains at least one number
	numRegex := regexp.MustCompile(`\d`)
	if !numRegex.MatchString(password) {
		return fmt.Errorf("password needs a number")
	}

	// Check if the password contains at least one lowercase letter
	lowercaseRegex := regexp.MustCompile(`[a-z]`)
	if !lowercaseRegex.MatchString(password) {
		return fmt.Errorf("password needs a lowercase letter")
	}

	// Check if the password contains at least one uppercase letter
	uppercaseRegex := regexp.MustCompile(`[A-Z]`)
	if !uppercaseRegex.MatchString(password) {
		return fmt.Errorf("password needs an uppercase letter")
	}

	// Check if the password contains at least one symbol
	symbolRegex := regexp.MustCompile(`[!@#~$%^&*()+|_]`)
	if !symbolRegex.MatchString(password) {
		return fmt.Errorf("password needs a symbol")
	}

	// If all the requirements are met, return nil
	return nil
}

Experience the magic of coding unfold as you execute this code!

package main

import (
	"fmt"
	"regexp"
)

func CheckPasswordComplexity(password string) error {
	if len(password) < 8 {
		return fmt.Errorf("password should contain at least 8 characters")
	}

	numRegex := regexp.MustCompile(`\d`)
	if !numRegex.MatchString(password) {
		return fmt.Errorf("password needs a number")
	}

	lowercaseRegex := regexp.MustCompile(`[a-z]`)
	if !lowercaseRegex.MatchString(password) {
		return fmt.Errorf("password needs a lowercase letter")
	}

	uppercaseRegex := regexp.MustCompile(`[A-Z]`)
	if !uppercaseRegex.MatchString(password) {
		return fmt.Errorf("password needs an uppercase letter")
	}

	symbolRegex := regexp.MustCompile(`[!@#~$%^&*()+|_]`)
	if !symbolRegex.MatchString(password) {
		return fmt.Errorf("password needs a symbol")
	}

	return nil
}

func main() {
	fmt.Println(CheckPasswordComplexity("secret123"))   // password needs an uppercase letter
	fmt.Println(CheckPasswordComplexity("Secret123"))   // password needs a symbol
	fmt.Println(CheckPasswordComplexity("Secret123!!")) // <nil> -> password is complex
}

enjoy your code!