正则表达式不检查至少一个大写字母

时间:2019-09-17 11:11:41

标签: swift regex

我正在尝试为密码添加验证。

要求是:

  1. 至少包含1个大写字母,
  2. 至少包含1个小写字母,
  3. 至少包含1个数字。
  4. 长度必须在8到20个字符之间
  5. 它可以包含除*()_ + <>?
  6. 以外的特殊字符。

这是我的正则表达式=>

^(?=.*[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
            }
 }

0 个答案:

没有答案