Как проверить правильность GUID (или UUID) с помощью NSRegularExpression или любым другим эффективным способом в Objective-C

метод должен возвращать TRUE если NSString что-то вроде @"{a5b8a206-E14D-429B-BEB0-2DD0575F3BC0}" и FALSE для NSString как @"bla bla bla"

Я использую что-то вроде:

- (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}

3 ответов


это регулярное выражение для меня

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

короче:

  • \A и \Z является началом и концом строки
  • \{ и \} убежал вьющиеся bracets
  • [A-F0-9]{8} ровно 8 символов либо 0,1,2,3,4,5,6,7,8,9, A,B,C,D,E, F

как NSRegularExpression это будет выглядеть так

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 ...

эта функция сделает работу..

-(BOOL)isValidUUID : (NSString *)UUIDString
{
     return (bool)[[NSUUID alloc] initWithUUIDString:U‌​UIDString]; 
}

Спасибо @Erzékiel


вы можете использовать следующий метод, чтобы проверить это:

- (BOOL)isUUID:(NSString *)inputStr
{
    BOOL isUUID = FALSE;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" options:NSRegularExpressionCaseInsensitive error:nil];
    NSInteger matches = [regex numberOfMatchesInString:inputStr options:0 range:NSMakeRange(0, [inputStr length])];
    if(matches == 1)
    {
       isUUID = TRUE;
    }
    return isUUID;
}