如果在编辑时文本字段输入与正则表达式匹配,请更改图像



我有一个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

最新更新