gpt4 book ai didi

objective-c - 检查 NSString 是否包含有效数字但已本地化

转载 作者:太空狗 更新时间:2023-10-30 03:41:56 25 4
gpt4 key购买 nike

如何根据本地化数字格式检查字符串是否包含有效数字。

这个问题不是关于转换数字的主要问题。我可以用 NSNumberFormatter 做到这一点。如果我做不到,那么我什至不需要这样做,可以将字符串保留为字符串。但我需要检查它是否包含有效数字。

顺便说一句,我们正处于 textField:shouldChangeCharactersInRange: ... 委托(delegate)方法的中间。这里我想通过返回 NO 来防止输入非法字符。

这是我的代码:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

// Only test for numbers if it is a certain text field.
if (textField == self.numValueTextField) {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];

// The user deleting all input is perfectly acceptable.
if ([resultingString length] == 0) {
return true;
}

double holder;

NSScanner *scan = [NSScanner scannerWithString: resultingString];

BOOL isNumeric = [scan scanDouble: &holder] && [scan isAtEnd];

if (isNumeric) {

[self.detailItem setValue:number forKey:kValueDouble];
}

return isNumeric;
}
return YES; // default for any other text field - if any.
}

这很好用,但它暗示了英文符号。这意味着 float 必须是 pont。但它可能是逗号或世界某些地方的任何东西。

我确实知道如何检查某些字符。所以我可以检查 0-9、逗号和点。但是有没有一种“正确”的方式来做到这一点?

如果它很重要:我在 iOS 环境中。

最佳答案

默认情况下,数字格式化程序将使用当前语言环境的信息,因此它应该能够为您进行此检查。只需尝试格式化字符串。如果结果为 nil,则它无效。

static NSNumberFormatter * formatter = [NSNumberFormatter new];
//... build string
NSNumber * num = [formatter numberFromString:resultingString];
BOOL isNumeric = (num != nil);

例如:

NSNumberFormatter * formatter = [NSNumberFormatter new];

// US uses period as decimal separator
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

NSLog(@"%@", [formatter numberFromString:@"3.1415"]); // Valid NSNumber
NSLog(@"%@", [formatter numberFromString:@"3.14.15"]); // nil
NSLog(@"%@", [formatter numberFromString:@"31415"]); // Valid
NSLog(@"%@", [formatter numberFromString:@"3,1415"]); // nil

// Italy uses a comma as decimal separator
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"it"]];
NSLog(@"%@", [formatter numberFromString:@"3.1415"]); // nil
NSLog(@"%@", [formatter numberFromString:@"3.14.15"]); // nil
NSLog(@"%@", [formatter numberFromString:@"31415"]); // Valid
NSLog(@"%@", [formatter numberFromString:@"3,1415"]); // Valid

或者您可能更喜欢使用 getObjectValue:forString:range:error:,它将简单地返回 YESNO 以指示成功解析,如果您对更多详细信息感兴趣,还会给您一个错误对象。

关于objective-c - 检查 NSString 是否包含有效数字但已本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15349543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com