如何从iOS中删除用户输入的数字?

时间:2014-07-09 02:28:23

标签: ios objective-c regex validation nsstring

在我的应用程序中,我有一个字段供用户输入全名,但我需要阻止用户在文本字段中输入任何数字和表情符号。任何想法怎么做?

同时,我不能使用ASCII键盘,因为用户必须能够以不同的语言输入。

2 个答案:

答案 0 :(得分:1)

您正在指定field,但没有给出更多关于它的精确度,因此我假设我们在这里谈论UITextField,因为其他控件将遵循相同的逻辑:

首先应该为UITextField设计一个代表,让它说它将是当前的视图控制器:

#import <UIKit/UIKit.h>

@interface _4644493ViewController : UIViewController<UITextFieldDelegate>

@end

然后,在你的viewController.m中,你应该检查是否在键盘上按下的值是接受字符之前接受的字符(在这个例子中让我们尝试使用数字):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string isEqual:@"1"] || [string isEqual:@"2"] || [string isEqual:@"3"] || [string isEqual:@"4"] || [string isEqual:@"5"] || [string isEqual:@"6"] || [string isEqual:@"7"] || [string isEqual:@"8"] || [string isEqual:@"9"]) {
        return NO;
    }
    return YES;
}

编辑:

另外,不要忘记设计UITextField的代表,例如:

UITextField *test = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 200, 30)];
[test.layer setBorderColor:[UIColor blackColor].CGColor];
[test.layer setBorderWidth:2.0];
test.delegate = self;

[self.view addSubview:test];

答案 1 :(得分:1)

已经提到的委托函数的更好(IMO)和更简洁的实现:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    return [string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location == NSNotFound);
}

这将从数字0-9之外的每个可能字符创建一个字符集,然后在字符串中查找它们中的任何一个。此解决方案正确处理空字符串,这是用户使用删除键时发送的字符串。

如果要允许其他标点符号,可以使用NSMutableCharacterSet创建自己的字符集或使用NSCharacterSet方法

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789,.-"];

代替decimalDigitCharacterSet