Swift 4.1
我需要验证密码,但是我的最后一个条件(正则表达式)是谁与模式不匹配,我得到了这个正则表达式以验证最后一个条件我需要验证密码是否有特殊字符,如果有则验证字符是否有效保持在这个集合中(?=。?[(!@ $%^ ()_- + {};:。,)])如果它们超出集合,我需要知道并显示警报,我的代码如下:
extension String{
func isValidPassword(minCharacters : Int) -> Bool {
let regexToMatch = "(?=.*?[A-Z])(?=.*?[0-9]).{\(minCharacters),15}"
let passwordPredicate = NSPredicate(format: "SELF MATCHES %@", regexToMatch)
guard passwordPredicate.evaluate(with: self) == true else {
return false
}
guard self.hasSpecialCharacters() == true else {
return true
}
//The problem is here!
let regexToMatchCaracterSpecial = "(?=.*?[(!@$%^*()_+{};:.,)-])"
let paswordCharacters = NSPredicate(format: "SELF MATCHES %@", regexToMatchCaracterSpecial)
return paswordCharacters.evaluate(with: self) == true
}
func hasSpecialCharacters() -> Bool {
do {
let regex = try NSRegularExpression(pattern: ".*[^A-Za-z0-9].*", options: .caseInsensitive)
if let _ = regex.firstMatch(in: self, options: NSRegularExpression.MatchingOptions.reportCompletion, range: NSMakeRange(0, self.count)) {
return true
}
} catch {
debugPrint(error.localizedDescription)
return false
}
return false
}
}
下一个错误:
2018-09-19 17:03:15.353831-0500 mPaymentsAndLoyaly-Chedraui[47378:9327896] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't do regex matching, reason: Can't open pattern U_REGEX_INVALID_RANGE (string Alex1Ç, pattern (?=.*?[(!@$%^*()_-+{};:.,)]), case 0, canon 0)'
i加上连字符,但没有评估条件。