【问题标题】:NSDecimalNumber notANumber is not true for letter 'E'NSDecimalNumber notANumber 对于字母“E”不正确
【发布时间】:2014-04-04 12:49:33
【问题描述】:

我试图在UITextField 上应用验证,它不应该接受任何东西,而不是十进制数。 我使用了UITextFielddelegate方法:

  - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{


     NSDecimalNumber *number2 = [NSDecimalNumber decimalNumberWithString:string];
    if (!string || [string length] < 1 || [string isEqualToString:@""] )
    {
        return YES;
    }
    if (!number2 || [number2 isEqualToNumber:[NSDecimalNumber notANumber]])
    {
        return NO;
    }

    return YES;
}

它工作完美,但有两个问题。

1.当我输入值“E”或“e”时,它会接受它。

2.一旦它接受字母'E'或'e',它接受所有其他英文字母。

【问题讨论】:

  • 你不能把 UITextField 键盘做成 PhonePad 吗?
  • string 是替换文本(记录它),因此您的代码在逻辑上不正确,因为它没有像允许编辑后那样验证文本...
  • @user2071152 该应用程序是用于 ipad,我无法使用 Phonepad。

标签: ios objective-c ipad uitextfield


【解决方案1】:

这是来自文档。

除了数字之外,numericString 还可以 包括首字母“+”或“-”;一个“E”或“e”,表示 科学计数法数字的指数;和一个 NSLocaleDecimalSeparator 将小数与积分相除 数字的一部分。

也许你可以改用 NSRegularExpression

【讨论】:

    【解决方案2】:

    您应该使用NSNumberFormatter 来验证数字用户输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多