如何使用以下条件验证密码?有什么功能吗? [英] How to validate a password with my following condition? Any function?

查看:37
本文介绍了如何使用以下条件验证密码?有什么功能吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  1. 必须是大写字母.
  2. 它必须包含至少一个数字.
  3. 必须包含标点符号.
  4. 字符串中不能有密码"一词.
  5. 必须长于 7 个字符且短于 31 个字符.

例子

输入:passWord123!!!!"

Input: "passWord123!!!!"

输出:假

输入:turkey90AAA="

Input: "turkey90AAA="

输出:真

我尝试了以下代码,

func SimplePassword(_ str: String) -> String {

  let password = self.trimmingCharacters(in: CharacterSet.whitespaces)
    let passwordRegx = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&<>*~:`-]).{8,}$"
   let passwordCheck = NSPredicate(format: "SELF MATCHES %@",passwordRegx)
    return passwordCheck.evaluate(with: password)

  return str

}

推荐答案

这是一个验证密码的非正则表达式变体,我认为它比正则表达式解决方案更易于阅读和维护.

Here is a non-regex variant for validating the password, I would argue that it is easier to read and maintain than a regular expression solution.

func isValid(password: String) -> Bool {
    return (8...30).contains(password.count) &&
        password.rangeOfCharacter(from: .uppercaseLetters) != nil &&
        password.rangeOfCharacter(from: .decimalDigits) != nil &&
        password.rangeOfCharacter(from: .punctuationCharacters) != nil &&
        !password.lowercased().contains("password")
}

请注意,在您的示例中,您说turkey90AAA="应返回 true,但="不是标点符号,因此上述代码不会接受它.相反,这个字符是一个符号,所以如果你想包含它,那么还要添加对 .symbols 字符集的检查,password.rangeOfCharacter(from: .symbols) != nil

Note that in your example you say that "turkey90AAA=" should return true but '=' is not a punctuation mark so the above code will not accept it. Instead this character is a symbol so if you want to include it then also add a check against the .symbols character set, password.rangeOfCharacter(from: .symbols) != nil

这篇关于如何使用以下条件验证密码?有什么功能吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆