我有一个UITextField
和一个连接的textFieldDidChange
方法,我想在其中检查text
是否"正确"。我有三种不同的情况想检查一下。
textFieldDidChange-Method:
@objc func textFieldDidChange(_ textField: UITextField) {
switch textField {
case passwordTextField:
// check for upper and lowercase letter
if (textField.text!.matches("^(?=.*[A-Z]).(?=.*[a-z])$")){
checkLetterImage.image = UIImage(named: "correct")
}else {
checkLetterImage.image = UIImage(named: "false")
}
// check for length -> min 8
if(textField.text!.matches("^{8,}$")){
checkLengthImage.image = UIImage(named: "correct")
}else {
checkLengthImage.image = UIImage(named: "false")
}
// check for at least one number
if(textField.text!.matches("^(?=.*[0-9])")){
checkNumberImage.image = UIImage(named: "correct")
}else {
checkNumberImage.image = UIImage(named: "false")
}
break
default:
break
}
}
matches-Method
:
public extension String {
func matches(_ regex: String) -> Bool {
return self.range(of: regex, options: .regularExpression, range: nil, locale: nil) != nil
}
}
我不知道为什么上面的代码不起作用。我是不是在和雷格斯做错事??它永远不会进入任何if-cases
。。。
更新:
"数字检查"运行良好。鞋面&小写检查根本不起作用,长度检查的行为也不正常:在您键入内容并再次删除所有内容后,它会显示"正确"的图像。
有人知道为什么会发生这种事吗????
角色集拯救!
试试这些:
if text.count > 8 {
}
if text.rangeOfCharacter(from: .lowercaseLetters) != nil {
}
if text.rangeOfCharacter(from: .uppercaseLetters) != nil {
}
if text.rangeOfCharacter(from: .decimalDigits) != nil {
}
我认为您的^
和$
锚点可能是问题所在。
试试这个:
switch textField {
case passwordTextField:
// check for upper and lowercase letter
if (textField.text!.matches("(?=.*[a-z])(?=.*[A-Z])")){
checkLetterImage.image = UIImage(named: "correct")
}else {
checkLetterImage.image = UIImage(named: "false")
}
// check for length -> min 8
if(textField.text!.matches(".{8,}")){
checkLengthImage.image = UIImage(named: "correct")
}else {
checkLengthImage.image = UIImage(named: "false")
}
// check for at least one number
// could also use (?=.*\d)
if(textField.text!.matches("(?=.*[0-9])")){
checkNumberImage.image = UIImage(named: "correct")
}else {
checkNumberImage.image = UIImage(named: "false")
}
break