Skip to content

Instantly share code, notes, and snippets.

@kylelemons
Created May 16, 2012 15:54
Show Gist options
  • Save kylelemons/2711541 to your computer and use it in GitHub Desktop.
Save kylelemons/2711541 to your computer and use it in GitHub Desktop.
Very simple unicode-aware password checking
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