ios - 无法使用 Swift 对 UITextField 上的对象进行正则表达式匹配

标签 ios swift regex xcode

验证用户输入的密码我在 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/

相关文章:

ios - MKCoordinateRegionMakeWithDistance 显示错误坐标

ios - 在 Swift 的 AppDelegate 中显示警报

ios - 如何在 UIPickerView 中为每一行添加分隔线

ios - 禁用特定 UIView iOS 12 的自动旋转

ios - 错误 : failed to remove/Users/gs/Library/Developer/Xcode/DerivedData - “Info.plist” couldn’t be removed

ios - cocos 2d x捕获屏幕截图并在ios c++中立即显示

objective-c - NSTask/Process 弃用的方法和属性

javascript - 确定字符串中的组

java - 将 Java 模式转换为 Javascript 模式

mysql - 使用正则表达式更新 MySQL