Vérifier si une chaîne de caractères est alphanumérique dans Swift

Dans Swift, comment puis-je vérifier si un String est alphanumérique, c'est à dire, si elle ne contient qu'un ou plusieurs caractères alphanumériques [a-zA-Z0-9], à l'exclusion des lettres avec signes diacritiques, par exemple, de l'é.

21
demandé sur ma11hew28 2016-03-14 19:22:48

5 réponses

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

"".isAlphanumeric        // false
"abc".isAlphanumeric     // true
"123".isAlphanumeric     // true
"ABC123".isAlphanumeric  // true
"iOS 9".isAlphanumeric   // false
36
répondu ma11hew28 2018-06-18 13:23:38

une solution Swift 3 et 4 moderne

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

}

Utilisation:

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

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

cela fonctionne avec des langues autres que l'anglais, permettant des caractères diacritiques comme è et á, etc. Si vous souhaitez les ignorer, utilisez le drapeau"ignoreDiacritics: true".

16
répondu gavanon 2017-10-21 17:02:40

j'ai senti que la réponse acceptée en utilisant regex était concrète mais une solution plutôt lourde. Vous pouvez le vérifier de cette façon aussi rapide 3.0:

if yourString.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
    return "Username can only contain numbers or digits"
}
11
répondu carbonr 2017-03-26 16:31:33

ce regex utilisé pour vérifier que la chaîne contient au moins 1 alphabet + au moins 1 chiffre avec 8 caractères.

"^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$"
1
répondu Sarishti batta 2018-01-19 05:37:49
extension String {
    /// Allows only `a-zA-Z0-9`
    public var isAlphanumeric: Bool {
        guard !isEmpty else {
            return false
        }
        let allowed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
        let characterSet = CharacterSet(charactersIn: allowed)
        guard rangeOfCharacter(from: characterSet.inverted) == nil else {
            return false
        }
        return true
    }
}

XCTAssertFalse("".isAlphanumeric)
XCTAssertFalse("climate change".isAlphanumeric)
XCTAssertFalse("Poüet".isAlphanumeric)
XCTAssertTrue("Hawking2018".isAlphanumeric)
1
répondu neoneye 2018-03-20 18:49:02