【问题标题】:Swift Use of unresolved operator '=~'快速使用未解析的运算符'=~'
【发布时间】:2020-05-28 09:41:08
【问题描述】:

我正在尝试查找 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 operators


    【解决方案1】:

    =~ 似乎是一个自定义运算符(或者模式匹配运算符 ~= 在以前的 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      相关资源
      最近更新 更多