Подтвердить что ты не робот

Проверьте, является ли строка буквенно-цифровой в Swift

В Swift, как я могу проверить, является ли String буквенно-цифровым, т.е. если он содержит только один или несколько буквенно-цифровых символов [a-zA-Z0-9], за исключением букв с диакритикой, например, é.

4b9b3361

Ответ 1

extension String {
    var isAlphanumeric: Bool {
        return !isEmpty && range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil
    }
}

"".isAlphanumeric        // false
"abc123".isAlphanumeric  // true
"iOS 9".isAlphanumeric   // false

Ответ 2

Я чувствовал, что принятый ответ с использованием регулярного выражения был конкретным, но довольно тяжелым решением. Вы также можете проверить это в Swift 3.0:

if yourString.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
    return "Username can only contain numbers or digits"
}

Ответ 3

Современное решение Swift 3 и 4

extension String {

    func isAlphanumeric() -> Bool {
        return self.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) == nil && self != ""
    }

    func isAlphanumeric(ignoreDiacritics: Bool = false) -> Bool {
        if ignoreDiacritics {
            return self.range(of: "[^a-zA-Z0-9]", options: .regularExpression) == nil && self != ""
        }
        else {
            return self.isAlphanumeric()
        }
    }

}

Применение:

"".isAlphanumeric()         == false
"Hello".isAlphanumeric()    == true
"Hello 2".isAlphanumeric()  == false
"Hello3".isAlphanumeric()   == true

"Français".isAlphanumeric() == true
"Français".isAlphanumeric(ignoreDiacritics: true) == false

Это работает с языками, отличными от английского, позволяя диакритическим символам, таким как è и á, и т.д. Если вы хотите их игнорировать, используйте флаг "ignoreDiacritics: true".

Ответ 4

Это регулярное выражение, используемое для проверки того, что строка содержит по крайней мере 1 алфавит + по крайней мере 1 цифру вместе с 8 символами.

"^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$"