Dans Swift, comment puis-je vérifier si un String
est alphanumérique, c'est-à-dire s'il ne contient qu'un ou plusieurs caractères alphanumériques [a-zA-Z0-9]
, à l'exclusion des lettres avec signes diacritiques, par exemple é.
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
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()
}
}
}
tilisation:
"".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, autorisant les caractères diacritiques comme è et á, etc. Si vous souhaitez les ignorer, utilisez le drapeau "ignoreDiacritics: true
".
J'ai senti que la réponse acceptée en utilisant l'expression régulière était concrète mais une solution plutôt lourde. Vous pouvez le vérifier de cette manière également dans Swift 3.0:
if yourString.rangeOfCharacter(from: CharacterSet.alphanumerics.inverted) != nil {
return "Username can only contain numbers or digits"
}
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)
Cette expression régulière sert à 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,}$"