Ios 如何在以下条件下验证密码?有什么功能吗? 它必须有大写字母 它必须至少包含一个数字 它必须包含标点符号 字符串中不能包含单词“password” 它必须大于7个字符,小于31个字符

Ios 如何在以下条件下验证密码?有什么功能吗? 它必须有大写字母 它必须至少包含一个数字 它必须包含标点符号 字符串中不能包含单词“password” 它必须大于7个字符,小于31个字符,ios,swift,passwords,Ios,Swift,Passwords,例子 输入:“密码123!!!!” 输出:false 输入:“土耳其90AAA=” 输出:真 我尝试了以下代码 func SimplePassword(_ str: String) -> String { let password = self.trimmingCharacters(in: CharacterSet.whitespaces) let passwordRegx = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@

例子

输入:“密码123!!!!”

输出:false

输入:“土耳其90AAA=”

输出:真

我尝试了以下代码

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

}
func SimplePassword(str:String)->String{
让password=self.trimmingCharacters(在:CharacterSet.whitespaces中)
设passwordRegx=“^(?=.[A-Z])(?=.[A-Z])(?=.[0-9])(?=.[#?!@$%^&*:`-])。{8,}$”
let passwordCheck=NSPredicate(格式:“SELF MATCHES%@”,passwordRegx)
返回passwordCheck.evaluate(使用:password)
返回str
}

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

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
字符集
密码.rangeOfCharacter(from:.symbols)!=无

请展示您的尝试,并解释您遇到的任何具体问题。您走的路是正确的,您遇到了什么问题。