Swift 5-密码验证正则表达式错误



我正在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/

相关内容

  • 没有找到相关文章

最新更新