如何在iOS中从用户输入中删除数字?
在我的应用程序中,我有一个字段供用户输入全名,但我需要防止用户在文本字段中输入任何数字和表情符号。你知道怎么做吗如何在iOS中从用户输入中删除数字?,ios,objective-c,regex,validation,nsstring,Ios,Objective C,Regex,Validation,Nsstring,在我的应用程序中,我有一个字段供用户输入全名,但我需要防止用户在文本字段中输入任何数字和表情符号。你知道怎么做吗 同时,我不能使用ASCII键盘,因为用户必须能够以不同的语言输入。您指定的是字段,但没有给出更高的精度,因此我假设我们在这里讨论的是UITextField,因为其他控件将遵循相同的逻辑: 首先,您应该为UITextField设计一个委托,假设它是当前视图控制器: #import <UIKit/UIKit.h> @interface _4644493ViewControl
同时,我不能使用ASCII键盘,因为用户必须能够以不同的语言输入。您指定的是
字段
,但没有给出更高的精度,因此我假设我们在这里讨论的是UITextField
,因为其他控件将遵循相同的逻辑:
首先,您应该为UITextField
设计一个委托,假设它是当前视图控制器:
#import <UIKit/UIKit.h>
@interface _4644493ViewController : UIViewController<UITextFieldDelegate>
@end
编辑:
另外,不要忘记设计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];
前面提到的委派功能的更好(IMO)和更简洁的实现:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
return [string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location == NSNotFound);
}
这将从数字0-9之外的每个可能字符创建一个字符集,然后在字符串中查找其中任何一个字符。此解决方案正确处理用户使用delete键时发送的空字符串
如果要允许标点字符和其他字符,可以使用NSMutableCharacterSet或使用NSCharacterSet方法创建自己的字符集
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789,.-"];
代替decimalDigitCharacterSet谢谢,但是关于表情符号,我如何检测它们呢?@SoheilBm这取决于你的表情符号实现,没有代码,我无法指导你,但是通常,如果你使用这个逻辑只允许字母,应该可以。这个答案太严格了。它不能处理OP想要的大部分内容,也不能处理用户粘贴到包含多个字符的文本中。为什么不简单地确保
string
仅包含letterCharacterSet
NSCharacterSet
中的字符?虽然你也需要允许一些标点符号,因为很多名字都有标点符号。@rmaddy,谢谢你的评论和建议,我会尽快做一些研究,并尝试改进我的答案
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"0123456789,.-"];