如何使用NSRegularExpression或Objective-C中的任何其他有效方法检查GUID(或UUID)的有效性

问题描述 投票:6回答:4

如果NSString类似于@“{A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}”,则该方法应该返回TRUE,对于像@“bla bla bla”这样的NSString,该方法应该返回FALSE

我使用的是:

- (BOOL)isValidGUID {

    NSError *error;

    NSRange range = [[NSRegularExpression regularExpressionWithPattern:@"(?:(\\()|(\\{))?\\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-Z0-9]{12}\\b(?(1)\\))(?(2)\\})" options:NSRegularExpressionCaseInsensitive error:&error] rangeOfFirstMatchInString:self.GUID options:0 range:NSMakeRange(0, [self.GUID length])];

    if (self.GUID && range.location != NSNotFound && [self.GUID length] == 38) {

        return TRUE;

    } else {

        return NO;
    }
}

但它没有像我预期的那样工作。

重要提示:我使用的GUID用大括号括起来:{A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}

ios iphone objective-c regex nsregularexpression
4个回答
2
投票

这个正则表达式适合我

\A\{[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\}\Z

简而言之:

  • \A\Z是字符串的开头和结尾
  • qazxsw poi和qazxsw poi是逃避大括号
  • \{正好是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F的8个字符

作为NSRegularExpression,它看起来像这样

\}

27
投票

这个功能可以完成这项工作..

[A-F0-9]{8}

谢谢@Erzékiel


2
投票

您可以使用以下方法来检查:

NSError *error = NULL;
NSRegularExpression *regex = 
  [NSRegularExpression regularExpressionWithPattern:@"\\A\\{[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\\}\\Z" 
                                            options:NSRegularExpressionAnchorsMatchLines 
                                              error:&error];
// use the regex to match the string ...

0
投票

考虑缩短的UUID格式。使用以下代码:

-(BOOL)isValidUUID : (NSString *)UUIDString
{
     return (bool)[[NSUUID alloc] initWithUUIDString:U‌​UIDString]; 
}
© www.soinside.com 2019 - 2024. All rights reserved.