Ios Can';t使用Swift对UITextField上的对象进行正则表达式匹配
验证用户输入的密码时,Xcode中出现以下错误: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“无法在对象Bopster.RegisterPresenter上进行正则表达式匹配。” 这是用于验证在ViewController中作为UITextField输入的密码的方法Ios Can';t使用Swift对UITextField上的对象进行正则表达式匹配,ios,swift,regex,xcode,Ios,Swift,Regex,Xcode,验证用户输入的密码时,Xcode中出现以下错误: 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“无法在对象Bopster.RegisterPresenter上进行正则表达式匹配。” 这是用于验证在ViewController中作为UITextField输入的密码的方法 func isValidPassword(password: String) -> Bool { let passwordRegex = "^(?=.*\\d)(?
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)
}
然后根据条件,我决定移动或显示错误:
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(密码:String)->Bool{
设passwordRegex=“^(?=.*\\d)(?=.[a-z])(?=.[a-z])[0-9a-zA-z!@$%^&*()\-+{}124;?>。
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)
}
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)
}