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
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,FAs 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 ...
This function will do the job..
-(BOOL)isValidUUID : (NSString *)UUIDString
{
return (bool)[[NSUUID alloc] initWithUUIDString:UUIDString];
}
Thanks @Erzékiel
Consider the shortened UUID format. Use code below:
-(BOOL)isValidUUID:(NSString*)uuidString{
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:uuidString];
if (uuid ) {
return YES;
}
NSError *error;
NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:@"[^0-9|^a-f]" options:NSRegularExpressionCaseInsensitive error:&error];
NSArray *matches = [reg matchesInString:uuidString options:NSMatchingReportCompletion range:NSMakeRange(0, uuidString.length)];
if (matches.count == 0 && (uuidString.length == 4 || uuidString.length ==8) ) {
return YES;
}else{
return NO;
}
}
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;
}