Быстрое использование неразрешенного оператора '= ~' - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь найти код для быстрой проверки надежности пароля, затем вижу это из 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 '=~' указывала на =~, в чем его смысл и как я могу ее разрешить?

1 Ответ

1 голос
/ 28 мая 2020

=~ кажется настраиваемым оператором (или, возможно, оператор сопоставления с образцом ~= отличался в предыдущей версии Swift, но я сомневаюсь, что, поскольку оператор сопоставления с образцом не может обрабатывать сопоставление регулярных выражений или, по крайней мере, не может справиться с ним в Swift 5).

Вы можете заменить =~ на if password.range(of: pattern, options: .regularExpression) != nil, чтобы проверить, соответствует ли регулярное выражение вашему паролю.

Кроме того, enum регистры должны быть ниже CamelCase

Полный рабочий код:

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
        }
    }
}

Вы также можете упростить for l oop, используя предложение where, например:

for pattern in patterns where password.range(of: pattern, options: .regularExpression) != nil {
    strength += 1
}
...