【问题标题】:How to remove number from user input in iOS?如何从iOS中的用户输入中删除数字?
【发布时间】:2014-07-09 02:28:23
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c regex validation nsstring


    【解决方案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

    【讨论】:

      【解决方案2】:

      您指定了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];
      

      【讨论】:

      • 谢谢,但是表情符号字符怎么样,我如何检测它们?
      • @SoheilBm 这取决于你的表情符号实现,没有代码我无法指导你,但通常,如果你使用这个逻辑只允许字母,应该没问题
      • 这个答案太严格了。它不处理 OP 想要的大部分内容,也不处理用户粘贴包含多个字符的文本。为什么不简单地确保string 只包含来自letterCharacterSet NSCharacterSet 的字符?虽然您也需要允许一些标点符号,因为许多名称都有一些标点符号。
      • @rmaddy,感谢您的评论和建议,我会尽快做一些研究并尝试改进我的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      相关资源
      最近更新 更多