2013-12-18 12 views
5

Phương thức sẽ trả về TRUE nếu NSString giống như @ "{A5B8A206-E14D-429B-BEB0-2DD0575F3BC0} "và FALSE cho một NSString như @" bla bla bla"Cách kiểm tra tính hợp lệ của GUID (hoặc UUID) bằng NSRegularExpression hoặc bất kỳ cách hiệu quả nào khác trong Mục tiêu-C

tôi đang sử dụng một cái gì đó như:

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

nhưng nó không làm việc như tôi đã mong đợi.

Chú ý: GUID mà tôi đang sử dụng được bao bọc bởi dấu ngoặc nhọn như thế này: {A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}

Trả lời

3

regex này phù hợp đối với tôi

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

Nói tóm lại:

  • \A\Z là sự khởi đầu và kết thúc của chuỗi
  • \{\} là dấu ngoặc nhọn đã được kẹp
  • [A-F0-9]{8} chính xác là 8 ký tự 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F

là một NSRegularExpression nó sẽ trông như thế này

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

Nhờ nó hoạt động ... – Goppinath

3

Bạn có thể sử dụng phương pháp sau đây để kiểm tra điều này:

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

chức năng này sẽ làm công việc ..

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

Cảm ơn @ Erzékiel

+3

trình tốt cho tôi! Nó có thể được giảm thiểu như thế này: return (bool) [[NSUUID alloc] initWithUUIDString: UUIDString]; –

+0

Cảm ơn. Đây phải là câu trả lời được chấp nhận. Hoạt động tốt trên iOS 9. – alexburtnik

+0

Đơn giản và dễ hiểu. Cảm ơn. – Peymankh

Các vấn đề liên quan