验证用户输入的密码我在 Xcode 中收到以下错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't do regex matching on object Bopster.RegisterPresenter.'
这是用于验证在 ViewController 中作为 UITextField 输入的密码的方法
func isValidPassword(password: String) -> Bool {
let passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*()\\-_=+{}|?>.<,:;~`’]{8,}$"
debugPrint(passwordRegex)
return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: self)
}
在这里我声明了一个从正则表达式中获取 bool 值的属性。
let userPasswordChecked = isValidPassword(password: password)
然后根据条件我决定移动或显示错误:
if userPasswordChecked {
// True, store it in COStorage.
COStorage().savePassword(pass: password)
} else {
// False, message to user.
let error = "La constraseña no es valida."
self.view?.errorLoading(error: error)
}
我尝试过其他模式,但到目前为止,错误似乎出在 NSPredicate 上。
最佳答案
由于您已在 RegisterPresenter 类中声明了 isValidPassword
方法,因此 self
指的是 RegisterPresenter 的实例。
您只需将方法从 evaluate(with: self)
更改为 evaluate(with: password)
即可解决您的问题:
func isValidPassword(password: String) -> Bool {
let passwordRegex = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z!@#$%^&*()\\-_=+{}|?>.<,:;~`’]{8,}$"
debugPrint(passwordRegex)
return NSPredicate(format: "SELF MATCHES %@", passwordRegex).evaluate(with: password)
}
您想使用传入的密码字符串进行评估,而不是使用 RegisterPresenter。
关于ios - 无法使用 Swift 对 UITextField 上的对象进行正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59219546/