【问题标题】:NSString is a number? [duplicate]NSString 是一个数字吗? [复制]
【发布时间】:2014-04-22 20:38:11
【问题描述】:

我有一个 TextField,想知道用户是否只是按了数字

例如:: _tfNumber.text 只有数字?

NSString 上有什么函数可以解决这个问题吗?

【问题讨论】:

    标签: ios objective-c nsstring


    【解决方案1】:

    让我们试试正则表达式,

    NSString * numberReg = @"[0-9]";
    
    NSPredicate * numberCheck = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", numberReg];
    
    if ([numberCheck evaluateWithObject:textField.text])
        NSLog (@"Number");
    

    【讨论】:

    • 这不是只有在匹配一个数字时才评估为真吗?你的正则表达式不匹配字符串的开头和结尾,也没有重复。
    • 事实上,我确认这仅在单个数字时匹配。所以它会匹配字符串“1”,而不是“1234”。
    【解决方案2】:

    这会让你知道所有字符是否都是数字:

    NSString *originalString = @"1234";
    NSCharacterSet *numberSet = [NSCharacterSet decimalDigitCharacterSet];
    NSString * trimmedString = [originalString stringByTrimmingCharactersInSet:numberSet];
    if ((trimmedString.length == 0) && (originalString.length > 0)) {
        NSLog(@"Original string was all numbers.");
    }
    

    请注意,这确保它不会对空字符串给出误报,从技术上讲,空字符串也不包含任何非数字。

    【讨论】:

      【解决方案3】:

      没有。 NSString 不是NSNumber,您从UITextField 获得的任何值都将是NSString。请参阅 THIS SO answer 将输入的 NSString 值转换为 NSNumber

      【讨论】:

      • 这并不能完全回答问题,尽管我可以仅根据标题看到您的困惑。
      • 它绝对回答了这个问题。如果 TextFields 值不是数字(所有数字),则格式化程序中的 NSNumber 将为 nil。这种方法不仅可以检查,还可以获取值。请取消投票。
      • 没有。我支持我的反对票。我将问题读作:“如何检查字符串是否仅包含数字?”这可能会排除链接问题将接受的字符,例如 -eE.。鉴于这个问题有点不清楚。
      【解决方案4】:

      试试这个:

      NSCharacterSet *_NumericOnly = [NSCharacterSet decimalDigitCharacterSet];
      NSCharacterSet *myStringSet = [NSCharacterSet characterSetWithCharactersInString:mystring];
      
      if ([_NumericOnly isSupersetOfSet: myStringSet]) {
          NSLog(@"String has only numbers");    
      }
      

      我来自:http://i-software-developers.com/2013/07/01/check-if-nsstring-contains-only-numbers/

      您可以在UITextField 的委托方法textField:shouldChangeCharactersInRange:replacementString: 中使用此方法,并在用户输入时进行验证。

      【讨论】:

      • +1,因为它是一个创造性的解决方案,但请记住,这会对空字符串产生误报,因为任何包含任何内容的集合都是空集合的超集。此外,如果两个集合相同,isSupersetOfSet: 会返回YES,还是超集实际上必须包含其他字符?取决于此,它可能会为包含所有数字的字符串返回 NO
      • 我会在一段时间内尝试并确保 :) 感谢@Gavin 的提醒。
      【解决方案5】:

      不,但应该很容易写:

      - (BOOL)justContainsNumbers:(NSString *)str {
          if ([str length] == 0)
              return NO;
          for (NSUInteger i = 0; i < [str length]; i++)
              if (!isdigit([str characterAtIndex:i]))
                  return NO;
          return YES;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        • 2013-11-05
        • 2011-05-21
        相关资源
        最近更新 更多