我正在Swift上制作一个登录/up函数。我正在尝试使用regex验证密码。密码具有以下要求
- 至少7个字符长
- 至少一个大写字母
- 至少一个数字
这是我使用的验证正则表达式:"^(?=.[A-Z])(?=.[0-9]){7}$"
这是我的代码
let passwordTest = NSPredicate(format: "SELF MATCHES %@", "^(?=.[A-Z])(?=.[0-9]){7}$")
每当我试图用符合这些要求的密码登录时(例如Greatpass13),Xcode就会给我一个错误,说
Thread 1: "Can't do regex matching, reason: (Can't open pattern U_REGEX_RULE_SYNTAX (string Greatpass13, pattern ^(?=.[A-Z])(?=.[0-9]){7}$, case 0, canon 0))"
(?=^.{7,}$)(?=^.*[A-Z].*$)(?=^.*d.*$).*
简短说明
(?=^.{7,}$)
至少7个字符长(?=^.*[A-Z].*$)
至少一个大写字母(?=^.*d.*$)
至少一个数字.*
匹配包含所有断言的字符串
查看regex演示
Swift示例
let phonePattern = #"(?=^.{7,}$)(?=^.*[A-Z].*$)(?=^.*d.*$).*"#
func isValid(password: String) -> Bool {
return password.range(
of: phonePattern,
options: .regularExpression
) != nil
}
print(isValid(password: "Pass1")) // false
print(isValid(password: "Pass23word")) // true
print(isValid(password: "23password")) // false
print(isValid(password: "Greatpass13")) // true
您忘记在计数器7 前添加点
func isValidPassword() -> Bool {
let password = self.trimmingCharacters(in: CharacterSet.whitespaces)
let passwordRegx = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9]).{7}$"
let passwordCheck = NSPredicate(format: "SELF MATCHES %@",passwordRegx)
return passwordCheck.evaluate(with: password)
}
至少一个大写
至少一位
至少一个小写
总共最少7个字符
以下是基于您的正则表达式更新的正则表达式。
let passwordRegx = "^(?=.*?[A-Z])(?=.*?[0-9]).{7,}$"
let passwordPredicate = NSPredicate(format: "SELF MATCHES %@",passwordRegx)
此外,您还需要在末尾添加{7,},否则它将只匹配7个字符,并且不超过7个字符。
您可以在以下位置测试regex:https://regex101.com/