我正在尝试为密码添加验证。
要求是:
这是我的正则表达式=>
^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d(\\!\\@\\#\\$\\%\\^\\&\\-\\=\\{\\}\\[\\]\\|\\:\\;\\,\\.\\/)]{8,}$
除第一个条件外,它满足上述所有要求。允许此输入=> “ asd123456”
这是错误的。我应如何更改正则表达式?
我已经创建了ValidationFactory类来处理不同类型的验证
class VaildatorFactory {
static func validatorFor(type: ValidatorType) -> ValidatorConvertible {
switch type {
case .password: return PasswordValidator()
}
}
}
struct PasswordValidator: ValidatorConvertible {
func validated(_ value: String) throws -> String {
if value == "" || value.isEmpty {
throw ValidationError("Please enter valid credentials")
}
do {
if try NSRegularExpression(pattern: "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[A-Za-z\\d(\\!\\@\\#\\$\\%\\^\\&\\-\\=\\{\\}\\[\\]\\|\\:\\;\\,\\.\\/)]{8,}$", options: .caseInsensitive).firstMatch(in: value, options: [], range: NSRange(location: 0, length: value.count)) == nil {
throw ValidationError("Please enter valid credentials")
}
} catch {
throw ValidationError("Please enter valid credentials")
}
return value
}
}
此代码调用验证
self.customTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
@objc func textFieldDidChange(_ textfield: UITextField) {
do {
let _ = try VaildatorFactory.validatorFor(type: .password).validated(text)
} catch {
let e = error as! ValidationError
}
}