Iphone 如何在ipad中检查文本是否为数字?

Iphone 如何在ipad中检查文本是否为数字?,iphone,Iphone,我已经为ipad实现了一个基于客户机-服务器的应用程序(sdk 3.2)。我有一个价格字段,用户在其中输入价格值。但用户可能会错误地输入一些字母文本,所以我想检查此文本是否为数字,然后如何可能,请给我一些想法 提前感谢。试试这个: - (BOOL) isNumeric:(NSString *)aoInputString { NSCharacterSet *decimalSet = [NSCharacterSet characterSetWithCharactersInString:@"

我已经为ipad实现了一个基于客户机-服务器的应用程序(sdk 3.2)。我有一个价格字段,用户在其中输入价格值。但用户可能会错误地输入一些字母文本,所以我想检查此文本是否为数字,然后如何可能,请给我一些想法

提前感谢。

试试这个:

- (BOOL) isNumeric:(NSString *)aoInputString {

    NSCharacterSet *decimalSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];


    NSString *decTrimmed = [aoInputString stringByTrimmingCharactersInSet:decimalSet];

    if (decTrimmed.length > 0) {
        return NO;
    } else {
        return YES;
    } 
}

将字符串转换为数字的正确方法始终是使用
NSNumberFormatter
。使用诸如
-floatValue
-intValue
之类的方法可能会导致误报

瞧:

NSNumberFormatter * nf = [[NSNumberFormatter alloc] init];
[nf setNumberStyle:NSNumberFormatterDecimalStyle];

NSString * good = @"42.69";
NSString * bad = @"42.69abc";
NSString * abc = @"abc";
NSString * zero = @"0";

NSLog(@"-[good floatValue]: %f", [good floatValue]);
NSLog(@"-[bad floatValue]: %f", [bad floatValue]);
NSLog(@"-[abc floatValue]: %f", [abc floatValue]);
NSLog(@"-[zero floatValue]: %f", [zero floatValue]);

NSNumber * goodNumber = [nf numberFromString:good];
NSNumber * badNumber = [nf numberFromString:bad];
NSNumber * abcNumber = [nf numberFromString:abc];
NSNumber * zeroNumber = [nf numberFromString:zero];

NSLog(@"good (NSNumber): %@", goodNumber);
NSLog(@"bad (NSNumber): %@", badNumber);
NSLog(@"abc (NSNumber): %@", abcNumber);
NSLog(@"zero (NSNumber): %@", zeroNumber);

[nf release];
此日志记录:

2011-01-07 09:50:07.881 EmptyFoundation[4895:a0f] -[good floatValue]: 42.689999
2011-01-07 09:50:07.884 EmptyFoundation[4895:a0f] -[bad floatValue]: 42.689999
2011-01-07 09:50:07.885 EmptyFoundation[4895:a0f] -[abc floatValue]: 0.000000
2011-01-07 09:50:07.885 EmptyFoundation[4895:a0f] -[zero floatValue]: 0.000000
2011-01-07 09:50:07.886 EmptyFoundation[4895:a0f] good (NSNumber): 42.69
2011-01-07 09:50:07.887 EmptyFoundation[4895:a0f] bad (NSNumber): (null)
2011-01-07 09:50:07.887 EmptyFoundation[4895:a0f] abc (NSNumber): (null)
2011-01-07 09:50:07.888 EmptyFoundation[4895:a0f] zero (NSNumber): 0
意见:

  • 非数字字符串(
    @“42.69abc”
    @“abc”
    )的
    -floatValue
    会导致误报(0.000000)
  • 如果字符串不是数字,
    NSNumberFormatter
    将其报告为
    nil
作为额外的好处,
NSNumberFormatter
将区域设置考虑在内,因此如果当前区域设置有
设置为十进制分隔符,它将(正确地)将“42,69”识别为数字

TL;博士:


使用
NSNumberFormatter
。可能与我分析的“如何检查文本是否是数字;或者如果它不在iPad中”重复@Smashery:那么你的AI不是很好。上下文对于一个好的解析器非常重要。@JohnWhite,除了它是错误的。这将只识别整数值。如果你在处理价格问题,那么你必须考虑十进制数字(这是不行的)。是的,我显然复制了错误的代码部分。请注意,这可能无法解释其他一些无效情况,例如12…9(额外小数点)。。。(非十进制)等等。感谢苹果让这件事变得比实际情况更难。(如果你想要一个更健壮的解决方案,Regexlite可能是一个更好的选择)。它被称为
NSNumberFormatter
,它的处理能力比您编写的任何正则表达式都要大。我用这个@“0123456789.+-”来检查电话号码和姓名