我尝试了很多案例,但没有一个适合我。我试过了:
if resultTitles[indexPath.row].rangeOfCharacterFromSet(badCharacters) == nil {
let badCharacters = NSCharacterSet.decimalDigitCharacterSet().invertedSet
print("Index: \(indexPath.row)")
}
也试过
if ((resultTitles[0].toInt()) != nil) {
print("ERROR")
}
那么,我如何检查我的文字只包含数字?
答案 0 :(得分:60)
我发现在Swift 3中这个解决方案更清洁
import Foundation
CharacterSet.decimalDigits.isSuperset(of: CharacterSet(charactersIn: yourString))
答案 1 :(得分:31)
您只需要检查Set
的{{1}}字符的String
是否为包含0到9字符的Set
的子集。 / p>
extension String {
var isNumeric: Bool {
guard self.characters.count > 0 else { return false }
let nums: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
return Set(self.characters).isSubset(of: nums)
}
}
"".isNumeric // false
"No numbers here".isNumeric // false
"123".isNumeric // true
"Hello world 123".isNumeric // false
答案 2 :(得分:3)
这取决于您所说的数字。如果您的意思是0-9,则可以使用以下代码:
let numbersSet = CharacterSet(charactersIn: "0123456789")
let textCharacterSet = CharacterSet(charactersIn: "123")
if textCharacterSet.isSubset(of: numbersSet) {
print("text only contains numbers 0-9")
} else {
print("text contains invalid characters")
}
如果您要使用各种不同的数字指定方式,则可以使用CharacterSet.decimalDigits,其中包含各种数字指定方式。
答案 3 :(得分:3)
我们必须检查字符串的每个字符是否都是数字,并且字符串不能为空。
extension String {
var isNumeric: Bool {
return !(self.isEmpty) && self.allSatisfy { $0.isNumber }
}
}
allSatisfy(_谓词:(字符)抛出-> Bool)重新抛出-> Bool 是一种返回布尔值的方法,该值指示序列中的每个元素是否满足给定谓词。
以供参考:https://developer.apple.com/documentation/swift/array/2994715-allsatisfy
示例:
let string =“ 123” string.isNumeric ---- 返回true
让string_One =“ 1 @ 3” string_One.isNumeric ---- 返回false
答案 4 :(得分:2)
试试这个
find ~/.m2 -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;
答案 5 :(得分:2)
在上面Luca的出色著作的基础上,这是由Swift 5给出的答案。
extension String {
var isNumeric: Bool {
guard self.count > 0 else { return false }
let nums: Set<Character> = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
return Set(self).isSubset(of: nums)
}
}
答案 6 :(得分:1)
你的第一个选择适合我在操场上。再次检查。假设.edit_text{
cursor: pointer;
display: block;
height: 34px;
position: absolute;
top: 35px;
width: 246px;
z-index: 999;
}
str = resultTitles[indexPath.row]
答案 7 :(得分:0)
这可能会对你有帮助。
let string = "536783"
let num = Int(string);
if num != nil {
print("Valid Integer")
}
else {
print("Not Valid Integer")
}
答案 8 :(得分:0)
我认为最干净的Swift
方式是:
extension String {
var isDigits: Bool {
guard !self.isEmpty else { return false }
return !self.contains { Int(String($0)) == nil }
}
}
"123".isDigits // returns true
"12d".isDigits // returns false
答案 9 :(得分:0)
上面的某些代码仅适用于阿拉伯数字(0、1、2,...)。 但是,它不能与其他数字格式一起使用(例如在阿拉伯国家/地区使用的北印度语,١、٢、٣或在中文中使用的一种数字..)
我已经测试了下面的代码(取自上面的代码,对具有不同数字格式的数字进行了更正(中文,阿拉伯语的印地语,...)。
extension String {
var isNumeric : Bool { return CharacterSet(charactersIn: self).isSubset(of: CharacterSet.decimalDigits)
}
var isDigits : Bool {
guard !self.isEmpty else { return false }
let containsNonNumbers = self.contains { !$0.isNumber }
return !containsNonNumbers
}
}
答案 10 :(得分:0)
基于“克里斯蒂娜·德·里托”解决方案,这里是一个检查结果的小程序,您可以添加自己的CharacterSet
(swift 5)
var arr_IsStringNumberOnly:[String] = ["123", "456.7", "890,1", "1'234", "", "abc", "def3", "xyz 4", "5 äöü"]
for i in 0..<arr_IsStringNumberOnly.count {
//the code w/o 'nil'
CharacterSet.init(arrayLiteral: "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", ".", "'" ).isSuperset(of: CharacterSet(charactersIn: arr_IsStringNumberOnly[i]))
//the code with handling 'nil' (nil dosent work in test array)
//CharacterSet.init(arrayLiteral: "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", ".", "'" ).isSuperset(of: CharacterSet(charactersIn: arr_IsStringNumberOnly ?? "abc")) //if empty assume it's text
//the code with handling 'nil' (nil dosent work in test array)
//CharacterSet.init(arrayLiteral: "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", ".", "'" ).isSuperset(of: CharacterSet(charactersIn: arr_IsStringNumberOnly ?? "123")) //if empty assume it's numeric
//presentation:
print("arr_IsStringNumberOnly[i]: \(arr_IsStringNumberOnly[i]) \t '\(CharacterSet.init(arrayLiteral: "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ",", ".", "'" ).isSuperset(of: CharacterSet(charactersIn: arr_IsStringNumberOnly[i])) )'")
}
当前:
答案 11 :(得分:-1)
试试这个:
if ( [resultTitles[indexPath.row] isMatchedByRegex:@"^(?:|0|[1-9]\\d*)(?:\\.\\d*)?$"] ) {
//Text is only numeric
}
else
{
//Text is not only numeric
}