Vérifier si une chaîne de caractères est alphanumérique dans Swift
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