0

我在用:

cleanedDataCellR2C2 =  [cleanedDataCellR2C2 stringByReplacingOccurrencesOfString:@"," withString:@""];

和一大堆类似的语句从文本字段中删除所有键盘字符,除了数字...... - (减号),+ (加号),以及 0,1,2,3,4,文本字段中的 5、6、7、8 和 9 个数字。上面的示例只是将 an 中的逗号转换NSString为空值。

不想承认,但在一个项目中,我实际上使用了大约 80 条语句——除了上面显示的以外,每个键盘字符都有一条语句。你必须是一些更简单的方法。你对这份工作有什么建议?

4

2 回答 2

1

您可以尝试使用正则表达式,这里有几个示例:

使用正则表达式查找/替换 NSString 中的子字符串

NSRegularExpression:用 <a> 标签替换 url 文本

替换出现的包含任意数字的字符串

您还可以查看http://regexkit.sourceforge.net/RegexKitLite/

于 2012-07-31T04:35:26.597 回答
1

最好的解决方案是,如果可以的话,首先不要让他们输入非数字数据。你在用UITextField吗?如果不是,请忽略其余部分,但如果是这样:

首先,使您的视图控制器是一个UITextFieldDelegate,例如:

@interface MyViewController : UIViewController <UITextFieldDelegate>

然后,在viewDidLoad

self.myTextField.delegate = self;

其次,添加一个shouldChangeCharacterInRange只允许所需的字符:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *nonNumeric = [[NSCharacterSet characterSetWithCharactersInString:@"+-0123456789"] invertedSet];

    if ([string rangeOfCharacterFromSet:nonNumeric].location == NSNotFound)
        return TRUE;
    else
        return FALSE;
}

第三,您可能希望将文本字段的键盘更改为仅用于数字数据,例如self.myTextField.keyboardType = UIKeyboardTypeNumbersAndPunctuationUIKeyboardTypeDecimalPad类似的东西。

于 2012-07-31T04:57:35.447 回答