如何使用以下条件验证密码?有什么功能吗?有什么、如何使用、条件、密码

由网友(失了她又如何)分享简介:必须是大写字母.它必须包含至少一个数字.必须包含标点符号.字符串中不能有密码"一词.必须长于 7 个字符且短于 31 个字符.例子输入:passWord123!!!!"Input: "passWord123!!!!" 输出:假输入:turkey90AAA="Input: "turkey90AAA=" 输出...必须是大写字母.它必须包含至少一个数字.必须包含标点符号.字符串中不能有密码"一词.必须长于 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

阅读全文

相关推荐

最新文章