密码字段验证在 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 为假).
我有多个基于文本字段中文本更改的图像我需要更改所选图像,例如当用户输入大写字母和小写字母以及基于该图像的特殊字符和数字被选中时..但我不能'根据那个改变。 这是我的代码:
@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 为假).