В Swift, как я могу проверить, является ли String
буквенно-цифровым, т.е. если он содержит только один или несколько буквенно-цифровых символов [a-zA-Z0-9]
, за исключением букв с диакритикой, например, é.
Проверьте, является ли строка буквенно-цифровой в Swift
Ответ 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,}$"