【问题标题】:Best way to validate a number input in iOS?在 iOS 中验证数字输入的最佳方法是什么?
【发布时间】:2016-12-12 16:20:37
【问题描述】:

我有一个UITextField,用户应该在其中输入一个浮点数。我想检查这样的数字是否具有我收到的某种格式,例如“dddd.dd”,其中“d”是一个数字。格式可能随时更改,因为我也将其作为输入接收,因此例如我可能想在另一个时刻检查“,”字符是否用于小数,再举一个例子。

考虑到您从UITextField 中读取的textString 类型(可选),最好的方法应该是什么?

  • 具有所提供格式的谓词。然后评估输入字符串。然后转换为数字。
  • 尝试转换为数字。如果成功(如何处理分隔小数的字符?),然后用NumberFormatter检查格式?
  • 还有其他和/或更好的方法吗?

【问题讨论】:

  • 如果您没有太多格式,请尝试使用正则表达式根据情况验证输入,然后将其转换为数字。就像你建议的那样,第一种方式。
  • 你是否愿意限制用户除了号码之外不能注册任何东西?
  • @SahebRoy 是的,在这样的文本字段中,我只希望数字(以及千位和小数分隔符)

标签: ios numbers swift3 formatter nsnumberformatter


【解决方案1】:

试试这个

viewDidLoad 中或将文本字段的委托分配给self

-(void)viewDidLoad{
   self.txtFieldName.delegate = self;
}

现在实现这个委托方法 -

 -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if(textField == self.txtFieldName)
    {
        NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"01234567989."] invertedSet];
        NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
        return [string isEqualToString:filtered];
    }
    else
        return YES;
}

这将使您的文本字段只能采用 0-9 和 .(十进制)之间的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多