如果NSString类似于@“{A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}”,则该方法应该返回TRUE,对于像@“bla bla bla”这样的NSString,该方法应该返回FALSE
我使用的是:
- (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}
这个正则表达式适合我
\A\{[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\}\Z
简而言之:
\A
和\Z
是字符串的开头和结尾\{
正好是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F的8个字符作为NSRegularExpression,它看起来像这样
\}
这个功能可以完成这项工作..
[A-F0-9]{8}
谢谢@Erzékiel
您可以使用以下方法来检查:
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 ...
考虑缩短的UUID格式。使用以下代码:
-(BOOL)isValidUUID : (NSString *)UUIDString
{
return (bool)[[NSUUID alloc] initWithUUIDString:UUIDString];
}