Как проверить правильность 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:UUIDString];
}
Спасибо @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;
}