How to check the validity of a GUID (or UUID) using NSRegularExpression or any other effective way in Objective-C

This function will do the job..

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

Thanks @Erzékiel


This regex matches for me

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

In short:

  • \A and \Z is the beginning and end of the string
  • \{ and \} is escaped curly bracets
  • [A-F0-9]{8} is exactly 8 characters of either 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

As an NSRegularExpression it would look like this

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

You can use the following method to check this:

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