首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >判断字符串是否为数字

判断字符串是否为数字
EN

Stack Overflow用户
提问于 2011-05-23 07:04:57
回答 18查看 63.8K关注 0票数 93

我们如何检查一个字符串是否只由数字组成。我正在从字符串中取出一个子字符串,并希望检查它是否是数值子字符串。

代码语言:javascript
复制
NSString *newString = [myString substringWithRange:NSMakeRange(2,3)];
EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2011-05-23 07:13:59

这里有一种不依赖于尝试将字符串解析为数字的有限精度的方法:

代码语言:javascript
复制
NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([newString rangeOfCharacterFromSet:notDigits].location == NSNotFound)
{
    // newString consists only of the digits 0 through 9
}

参见+[NSCharacterSet decimalDigitCharacterSet]-[NSString rangeOfCharacterFromSet:]

票数 244
EN

Stack Overflow用户

发布于 2011-05-23 07:10:12

我建议使用NSNumberFormatter类中的numberFromString:方法,如果数字无效,它将返回nil;否则,它将返回NSNumber。

代码语言:javascript
复制
NSNumberFormatter *nf = [[[NSNumberFormatter alloc] init] autorelease];
BOOL isDecimal = [nf numberFromString:newString] != nil;
票数 34
EN

Stack Overflow用户

发布于 2016-02-16 15:19:57

使用以下方法-validateString:withPattern:通过正则表达式、模式"^[0-9]+$"进行验证。

代码语言:javascript
复制
[self validateString:"12345" withPattern:"^[0-9]+$"];

如果"123.123“被认为是具有模式"^[0-9]+(.{1}[0-9]+)?$"

  1. ,则为

如果恰好是4位数字,则为

  1. ,不带"."。带有pattern "^[0-9]{4}$".

如果数字没有"."且长度在2~ 5之间,则为

  1. 。带有pattern "^[0-9]{2,5}$".

带减号的

  1. "^-?\d+$"

可以在the online web site中检查正则表达式。

helper函数如下。

代码语言:javascript
复制
// Validate the input string with the given pattern and
// return the result as a boolean
- (BOOL)validateString:(NSString *)string withPattern:(NSString *)pattern
{
    NSError *error = nil;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:&error];

    NSAssert(regex, @"Unable to create regular expression");

    NSRange textRange = NSMakeRange(0, string.length);
    NSRange matchRange = [regex rangeOfFirstMatchInString:string options:NSMatchingReportProgress range:textRange];

    BOOL didValidate = NO;

    // Did we find a matching range
    if (matchRange.location != NSNotFound)
        didValidate = YES;

    return didValidate;
}

Swift 3版本:

在操场上测试。

代码语言:javascript
复制
import UIKit
import Foundation

func validate(_ str: String, pattern: String) -> Bool {
    if let range = str.range(of: pattern, options: .regularExpression) {
        let result = str.substring(with: range)
        print(result)
        return true
    }
    return false
}

let a = validate("123", pattern: "^-?[0-9]+")
print(a)
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6091414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档