2013-12-18 6 views
5

Metoda powinna zwrócić TRUE, jeśli NSString jest podobny do @ "{A5B8A206-E14D-429B-BEB0-2DD0575F3BC0} "i FAŁSZ dla NSString jak @" bla bla bla”Jak sprawdzić poprawność identyfikatora GUID (lub UUID) za pomocą NSRegularExpression lub innego efektywnego sposobu w Objective-C

używam coś takiego:

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

ale to nie działa jak się spodziewałem.

Ważne: GUID, który używam jest zamknięty klamrami jak to: {A5B8A206-E14D-429B-BEB0-2DD0575F3BC0}

Odpowiedz

3

Ten regex pasuje mi

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

W skrócie:

  • \A i \Z jest początek i koniec łańcucha
  • \{ i \} to ocienione kręcone bransoletki
  • [A-F0-9]{8} ma dokładnie 8 znaków albo 0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F

Jako NSRegularExpression będzie to wyglądać tak

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

Thanks to działa ... – Goppinath

3

Możesz skorzystać z następujących metod, aby sprawdzić to:

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

funkcja ta będzie wykonać zadanie ..

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

Dzięki @ Erzékiel

+3

działa dobrze dla mnie! Można to zminimalizować w następujący sposób: return (bool) [[NSUUID alloc] initWithUUIDString: UUIDString]; –

+0

Dzięki. To powinna być akceptowana odpowiedź. Działa dobrze na iOS 9. – alexburtnik

+0

Prosty i prosty. Dzięki. – Peymankh

Powiązane problemy