我有一个UITextField
并且我只想要一个大于 0 的数字(我不想要非数字字符或值 0 )
这是我检查它是否为空的方式:
if(seizure.text.length==0)
这是我检查它是否等于0的方法:
else if(seizure.text doubleValue]==0)
如何检查非数字字符?
我有一个UITextField
并且我只想要一个大于 0 的数字(我不想要非数字字符或值 0 )
这是我检查它是否为空的方式:
if(seizure.text.length==0)
这是我检查它是否等于0的方法:
else if(seizure.text doubleValue]==0)
如何检查非数字字符?
首先检查字符串中是否有字符,然后检查确保它只包含数字字符,最后检查值是否大于 0:
if (seizure.text.length > 0)
{
NSCharacterSet *nonNumbers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([seizure.text rangeOfCharacterFromSet:nonNumbers].location == NSNotFound)
{
if ([seizure.text doubleValue] > 0)
{
// Text Field contains a numeric value greater than 0
NSLog(@"Good number.");
return;
}
}
}
// If we make it to here, it does not meet your requirements.
NSLog(@"Bad Number.");
NSScanner
会在这里很好地完成工作。与 不同-[NSString doubleValue]
,它scanDouble:
可以解析然后告诉你它是否消耗了整个字符串,所以你会知道存在非数字字符。
一些测试用例的演示。有关预期结果的描述,请参阅注释。
NSArray * texts = @[// First four unacceptable because non-numeric
@"", @"Hello, world!", @"1.0 excelsior", @"Jiminy 1.0 Crickets",
// These three unacceptable because 0 or less
@"0.0" @"0", @"-2048",
// Last three are good
@"3.14159", @"1", @"10000000000.0"];
for( NSString * text in texts ){
NSScanner * scanner = [NSScanner scannerWithString:text];
double val;
[scanner scanDouble:&val];
// Scanned the whole string and ended up with a positive value
if( [scanner isAtEnd] && val > 0 ){
NSLog(@"'%@'? I accept.", text);
}
else {
NSLog(@"'%@' is no good.", text);
}
}
[seizure.text doubleValue] == 0
如果seizure.text
是零的文本表示或不包含数字的有效文本表示,则为真(请参阅文档doubleValue
)。
换句话说,如果这个表达式为假,那么你有一个以数字开头的字符串值。但是,您仍然不知道您的字符串 value 是否仅包含一个数字,例如[@"2.5 miles" doubleValue]
具有 value 2.5
。如果您需要处理这样的字符串,您应该查看NSScanner
.