如何解决检查UITextField是否仅是字符/数字
我有这段代码。...
let characterset = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-")
if itemDescription.text!.rangeOfCharacter(from: characterset.inverted) != nil {
print("string contains special characters")
let message = MDCSnackbarMessage()
message.text = "Numbers and letters only."
MDCSnackbarManager.show(message)
progressView.isHidden = true
buttonSearchOutlet.isHidden = false
}
无论我输入什么内容,我都会显示小吃栏。我希望这些都是错误的
Hello
hello
hello1
hello-
我希望这是真的
Hello!
hello's
hello1@
hello$&@#
我做错了什么?
解决方法
您可以简单地检查所有字符是否都满足条件,并检查包含有效字符的字符串是否包含这些字符。
extension StringProtocol {
var isLetterDigitOrHyphen: Bool {
allSatisfy("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-".contains)
}
}
用法:
let str = "Hello"
if str.isLetterDigitOrHyphen {
print("string is ok")
} else {
print("string contains special characters")
}
"Hello".isLetterDigitOrHyphen // true
"hello".isLetterDigitOrHyphen // true
"hello1".isLetterDigitOrHyphen // true
"hello-".isLetterDigitOrHyphen // true
"Hello!".isLetterDigitOrHyphen // false
"hello's".isLetterDigitOrHyphen // false
"hello1@".isLetterDigitOrHyphen // false
"hello$&@#".isLetterDigitOrHyphen // false
如果您想使用正则表达式:
extension StringProtocol {
var isLetterDigitOrHyphen: Bool {
range(of:"^[a-zA-Z0-9-]{1,}$",options: .regularExpression) != nil
}
}
或使用字符集:
extension StringProtocol {
var isLetterDigitOrHyphen: Bool {
unicodeScalars.allSatisfy(CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-").contains)
}
}
如果您愿意,您当然可以简单地取反结果
extension String {
static let validCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-"
}
extension StringProtocol {
var isNotLetterDigitOrHyphen: Bool {
!unicodeScalars.allSatisfy(CharacterSet(charactersIn: .validCharacters).contains)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。