密码字段验证在 Swift 3 中不起作用

Password Filed Validation not working in Swift 3

我有多个基于文本字段中文本更改的图像我需要更改所选图像,例如当用户输入大写字母和小写字母以及基于该图像的特殊字符和数字被选中时..但我不能'根据那个改变。 这是我的代码:

@IBAction func textFieldEditingChanged(_ sender: Any) {

    if isValidated(passwordTextField.text!){

       print("succ")
    }
}

func isValidated(_ password: String) -> Bool {
    var lowerCaseLetter: Bool = false
    var upperCaseLetter: Bool = false
    var digit: Bool = false
    var specialCharacter: Bool = false

    for char in password.unicodeScalars {
        if !lowerCaseLetter {
            lowerCaseLetter = CharacterSet.lowercaseLetters.contains(char)

        }
        if !upperCaseLetter {
            upperCaseLetter = CharacterSet.uppercaseLetters.contains(char)
        }
        if !digit {
            digit = CharacterSet.decimalDigits.contains(char)
        }

        if !specialCharacter {
            specialCharacter = CharacterSet.punctuationCharacters.contains(char)
        }
    }

    if  (specialCharacter) {
        //do what u want
        self.SpecialCharacter_img.image = UIImage(named: "GreenTick")
        return false
    }
    if  ( digit) {
        //do what u want
        self.onenumberImageCondiotion_img.image = UIImage(named: "GreenTick")
        return false
    }

    if  ( lowerCaseLetter && upperCaseLetter) {
        //do what u want
        self.UpperCaseImageConditions_img.image = UIImage(named: "GreenTick")
        return false
    }
    else {
        self.UpperCaseImageConditions_img.image = UIImage(named: "redtick")
        self.SpecialCharacter_img.image = UIImage(named: "redtick")
        self.onenumberImageCondiotion_img.image = UIImage(named: "redtick")
        return false
    }
}

您在 isValidated 方法中的代码只需要稍微调整一下:

我稍微修改了一下,它在我的测试项目中有效。

func isValidated(_ password: String) -> Bool {
    var lowerCaseLetter: Bool = false
    var upperCaseLetter: Bool = false
    var digit: Bool = false
    var specialCharacter: Bool = false

    for char in password.unicodeScalars {
        if !lowerCaseLetter {
            lowerCaseLetter = CharacterSet.lowercaseLetters.contains(char)

        }
        if !upperCaseLetter {
            upperCaseLetter = CharacterSet.uppercaseLetters.contains(char)
        }
        if !digit {
            digit = CharacterSet.decimalDigits.contains(char)
        }

        if !specialCharacter {
            specialCharacter = CharacterSet.punctuationCharacters.contains(char)
        }
    }

    if  (lowerCaseLetter) {
        lowercaseLabel.text = "✅ Has a lowercase letter"
        lowercaseLabel.textColor = .green
        lowercaseLabel.sizeToFit()
    } else {
        lowercaseLabel.text = "Does not have a lowercase letter"
        lowercaseLabel.textColor = .red
        lowercaseLabel.sizeToFit()
    }

    if (upperCaseLetter) {
        uppercaseLabel.text = "✅ Has an uppercase letter"
        uppercaseLabel.textColor = .green
        uppercaseLabel.sizeToFit()
    } else {
        uppercaseLabel.text = "Does not have an uppercase letter"
        uppercaseLabel.textColor = .red
        uppercaseLabel.sizeToFit()
    }

    if  (specialCharacter) {
        specialLabel.text = "✅ Has a special character"
        specialLabel.textColor = .green
        specialLabel.sizeToFit()
    } else {
        specialLabel.text = "Does not have a special character"
        specialLabel.textColor = .red
        specialLabel.sizeToFit()
    }

    if  (digit) {
        numberLabel.text = "✅ Has a number"
        numberLabel.textColor = .green
        numberLabel.sizeToFit()
    } else {
        numberLabel.text = "Does not have a number"
        numberLabel.textColor = .red
        numberLabel.sizeToFit()
    }

    if lowerCaseLetter && upperCaseLetter && digit && specialCharacter {
        return true
    } else {
        return false
    }

最后一部分很重要,您必须检查所有条件是否为真,否则 return 为假。此外,我删除了每个放置“//做你想做的事”的部分中的 return false 代码,因为我认为该函数不应该 return false 除了在最终检查时。

然后在您检查每个子条件是否为真的特定 'if statements' 中,添加一个 else 语句,该语句将 toggle/set 您的图像用于任一状态(例如,绿色勾号为真,红色 X 为假).

项目代码: https://github.com/Wattholm/PasswordValidator