dougong2306
dougong2306
2019-04-20 02:51

在Golang中使用正则表达式确保特定的字符在字符串中,而不管位置如何

  • regex

I am building a super simple function to ensure a password contains specific characters. Namely, the password should have the following:

  • One lowercase letter
  • One uppercase letter
  • One digit
  • One special character
  • No white space, #, or |

I thought regex would be the simplest way to go about doing this. But, I am having a hard time figuring out how to do this in Golang. Currently, I have a bunch of separate regex MatchString functions which I will combine to get the desired functionality. For example:

lowercaseMatch := regexp.MustCompile(`[a-z]`).MatchString
uppercaseMatch := regexp.MustCompile(`[A-Z]`).MatchString
digitMatch := regexp.MustCompile(`\d`).MatchString
specialMatch := regexp.MustCompile(`\W`).MatchString
badCharsMatch := regexp.MustCompile(`[\s#|]`).MatchString
if (lowercaseMatch(pwd) 
        && uppercaseMatch(pwd) 
        && digitMatch(pwd)
        && specialMatch(pwd)
        && !badCharsMatch(pwd)) {
    /* password OK */
} else {
    /* password BAD */
}

While this makes things pretty readable, I would prefer a more concise regex, but I don't know how to get regex to search for a single character of each of the above categories (regardless of position). Can someone point me in the right direction of how to achieve this? Additionally, if there is a better way to do this than regex, I am all ears.

Thanks!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答