正则表达式在Golang

时间:2019-06-18 15:15:21

标签: regex go

我正在使用一个功能来验证用户密码的更新。

我需要使用以下正则表达式来增强密码:

(?=^.{8,}$)(?=.\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s)[0-9a-zA-Z!@#$%^&*()]*$

但是我不知道如何在我的代码中实现它。

这是我的代码:

  // UpdatePassword  uptdate the password for this user.
func UpdatePassword(unitID string, loginID string, password string) (err error) {
    f := GetFederation(unitID)
    ldap := connections[f.Connection]
    hash, err := HashPassword(password, "SSHA", nil)
    if err != nil {
        msg := fmt.Sprintf("password hash generation failed for %s. Error: %s", loginID, err.Error())
        return errors.New(msg)
    }
    originalPasswordHash, err := mdb.GetUserPasswordHash(loginID, f.ID)
    if err != nil {
        if err.Error() == mgo.ErrNotFound.Error() && ldap != nil {
            var profile map[string]string
            profile, err = ldap.GetProfile(loginID)
            if err != nil {
                debug.Println("get Profile error ", err)
                return err
            }
            login := profile[config.Connections[f.ID].LoginField]
            loginID, originalPasswordHash, err = ldap.GetPasswordHash(login)
            if err != nil {
                return err
            }
        } else {
            return err
        }
    }
    if err = mdb.ChangeUserPassword(loginID, f.ID, hash); err != nil {
        debug.Println("ChangeUserPassword error ", err)
        return err
    }

    if ldap != nil {
        err = ldap.ChangePassword(loginID, password)
        if err != nil {
            info.Printf("revert password change in DB for user %s", loginID)
            if err = mdb.ChangeUserPassword(loginID, f.ID, originalPasswordHash); err != nil {
                return fmt.Errorf("cannot revert password for user %s in DB", loginID)
            }
            return fmt.Errorf("cannot change password for user %s in ldap", loginID)
        }
    }

    return nil
}

你有个主意吗?

非常感谢您

0 个答案:

没有答案