Swift 使用未解析的运算符“=~”
Swift Use of unresolved operator '=~'
我试图找到 swift 密码强度检查器的代码,然后我看到 this from github 我修复了一些代码,但有一个运算符我不明白,它是 =~
这是我的代码
enum PasswordStrength: Int {
case None
case Weak
case Moderate
case Strong
static func checkStrength(password: String) -> PasswordStrength {
var len: Int = password.count
var strength: Int = 0
switch len {
case 0:
return .None
case 1...4:
strength += 1
case 5...8:
strength += 2
default:
strength += 3
}
// Upper case, Lower case, Number & Symbols
let patterns = ["^(?=.*[A-Z]).*$", "^(?=.*[a-z]).*$", "^(?=.*[0-9]).*$", "^(?=.*[!@#%&-_=:;\"'<>,`~\*\?\+\[\]\(\)\{\}\^\$\|\\\.\/]).*$"]
for pattern in patterns {
if (password =~ pattern).boolValue {
strength += 1
}
}
switch strength {
case 0:
return .None
case 1...3:
return .Weak
case 4...6:
return .Moderate
default:
return .Strong
}
}
}
我的错误 Use of unresolved operator '=~'
指向 =~
,这是什么意思,我该如何解决?
=~
似乎是一个自定义运算符(或者模式匹配运算符 ~=
在以前的 Swift 版本中可能有所不同,但我对此表示怀疑,因为模式匹配运算符无法处理正则表达式匹配或至少无法在 Swift 5).
中处理
您可以将 =~
替换为 if password.range(of: pattern, options: .regularExpression) != nil
以检查正则表达式是否与您的密码匹配。
此外,enum
个案例应该是 lowerCamelCase
完整的工作代码:
enum PasswordStrength: Int {
case none
case weak
case moderate
case strong
static func checkStrength(password: String) -> PasswordStrength {
let len = password.count
var strength: Int = 0
switch len {
case 0:
return .none
case 1...4:
strength += 1
case 5...8:
strength += 2
default:
strength += 3
}
// Upper case, Lower case, Number & Symbols
let patterns = ["^(?=.*[A-Z]).*$", "^(?=.*[a-z]).*$", "^(?=.*[0-9]).*$", "^(?=.*[!@#%&-_=:;\"'<>,`~\*\?\+\[\]\(\)\{\}\^\$\|\\\.\/]).*$"]
for pattern in patterns {
if password.range(of: pattern, options: .regularExpression) != nil {
strength += 1
}
}
switch strength {
case 0:
return .none
case 1...3:
return .weak
case 4...6:
return .moderate
default:
return .strong
}
}
}
您还可以使用这样的 where 子句来简化 for
循环:
for pattern in patterns where password.range(of: pattern, options: .regularExpression) != nil {
strength += 1
}
我试图找到 swift 密码强度检查器的代码,然后我看到 this from github 我修复了一些代码,但有一个运算符我不明白,它是 =~
这是我的代码
enum PasswordStrength: Int {
case None
case Weak
case Moderate
case Strong
static func checkStrength(password: String) -> PasswordStrength {
var len: Int = password.count
var strength: Int = 0
switch len {
case 0:
return .None
case 1...4:
strength += 1
case 5...8:
strength += 2
default:
strength += 3
}
// Upper case, Lower case, Number & Symbols
let patterns = ["^(?=.*[A-Z]).*$", "^(?=.*[a-z]).*$", "^(?=.*[0-9]).*$", "^(?=.*[!@#%&-_=:;\"'<>,`~\*\?\+\[\]\(\)\{\}\^\$\|\\\.\/]).*$"]
for pattern in patterns {
if (password =~ pattern).boolValue {
strength += 1
}
}
switch strength {
case 0:
return .None
case 1...3:
return .Weak
case 4...6:
return .Moderate
default:
return .Strong
}
}
}
我的错误 Use of unresolved operator '=~'
指向 =~
,这是什么意思,我该如何解决?
=~
似乎是一个自定义运算符(或者模式匹配运算符 ~=
在以前的 Swift 版本中可能有所不同,但我对此表示怀疑,因为模式匹配运算符无法处理正则表达式匹配或至少无法在 Swift 5).
您可以将 =~
替换为 if password.range(of: pattern, options: .regularExpression) != nil
以检查正则表达式是否与您的密码匹配。
此外,enum
个案例应该是 lowerCamelCase
完整的工作代码:
enum PasswordStrength: Int {
case none
case weak
case moderate
case strong
static func checkStrength(password: String) -> PasswordStrength {
let len = password.count
var strength: Int = 0
switch len {
case 0:
return .none
case 1...4:
strength += 1
case 5...8:
strength += 2
default:
strength += 3
}
// Upper case, Lower case, Number & Symbols
let patterns = ["^(?=.*[A-Z]).*$", "^(?=.*[a-z]).*$", "^(?=.*[0-9]).*$", "^(?=.*[!@#%&-_=:;\"'<>,`~\*\?\+\[\]\(\)\{\}\^\$\|\\\.\/]).*$"]
for pattern in patterns {
if password.range(of: pattern, options: .regularExpression) != nil {
strength += 1
}
}
switch strength {
case 0:
return .none
case 1...3:
return .weak
case 4...6:
return .moderate
default:
return .strong
}
}
}
您还可以使用这样的 where 子句来简化 for
循环:
for pattern in patterns where password.range(of: pattern, options: .regularExpression) != nil {
strength += 1
}