Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中从用户输入中删除数字?_Ios_Objective C_Regex_Validation_Nsstring - Fatal编程技术网

如何在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,.-"];