Goppinath Goppinath - 2 months ago 11x
iOS Question

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

The method should return TRUE if the NSString is something like @"{A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}" and FALSE for a NSString like @"bla bla bla"

I am using something like:

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

but it is not working as I have expected.

Important: GUID which I am using is enclosed by curly braces like this: {A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}


This regex matches for me


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" 
// use the regex to match the string ...