Skip to content

Instantly share code, notes, and snippets.

@fearblackcat
Last active November 14, 2023 03:25
Show Gist options
  • Save fearblackcat/d0199d6a47d60b067a4d4be173b0ef97 to your computer and use it in GitHub Desktop.
Save fearblackcat/d0199d6a47d60b067a4d4be173b0ef97 to your computer and use it in GitHub Desktop.
password check in golang
package main

import (
        "fmt"
        "unicode"
)

func validPassword(s string) error {
next:
        for name, classes := range map[string][]*unicode.RangeTable{
                "upper case": {unicode.Upper, unicode.Title},
                "lower case": {unicode.Lower},
                "numeric":    {unicode.Number, unicode.Digit},
                "special":    {unicode.Space, unicode.Symbol, unicode.Punct, unicode.Mark},
        } {
                for _, r := range s {
                        if unicode.IsOneOf(classes, r) {
                                continue next
                        }
                }
                return fmt.Errorf("password must have at least one %s character", name)
        }
        return nil
}

func main() {
        for _, s := range []string{
                "bad",
                "testPassword",
                "testPa##word",
                "b3tterPa$$w0rd",
        } {
                fmt.Printf("validPassword(%q) = %v\n", s, validPassword(s))
        }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment