我正在尋找iPhone的一些簡單的正則表達式來驗證NSString是否是有效的十六進制格式,只包含0-9和a-f的字符。 GUID是一樣的。或者是否已經有內置的函數來檢查GUID是否有效?用於GUID的iPhone正則表達式
我只找到一些關於創建GUID的文章。 This SO答案以我使用它們的格式創建GUID。
樣品GUID
ADD2B9F7-A699-4EF3-9A70-130B92154B11
我正在尋找iPhone的一些簡單的正則表達式來驗證NSString是否是有效的十六進制格式,只包含0-9和a-f的字符。 GUID是一樣的。或者是否已經有內置的函數來檢查GUID是否有效?用於GUID的iPhone正則表達式
我只找到一些關於創建GUID的文章。 This SO答案以我使用它們的格式創建GUID。
樣品GUID
ADD2B9F7-A699-4EF3-9A70-130B92154B11
爲了簡化Zaph的正確答案,只是這種方法添加到某個類別上的NSString:
-(BOOL) isGuid {
NSString *regexString = @"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}";
NSRange guidValidationRange = [self rangeOfString:regexString options:NSRegularExpressionSearch];
return (guidValidationRange.location == 0 && guidValidationRange.length == self.length);
}
的一種方式是使用NSCharacterSet
:
NSString *testCharacters = @"ABCDEFabcdef-";
NSCharacterSet *testCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:testCharacters] invertedSet];
NSString *testString1 = @"ADD2B9F7-A699-4EF3-9A70-130B92154B11";
NSRange range1 = [testString1 rangeOfCharacterFromSet:testCharacterSet];
NSLog(@"testString1: %@", (range1.location == NSNotFound) ? @"Good" : @"Bad");
NSString *testString2 = @"zDD2B9F7-A699-4EF3-9A70-130B92154B11";
NSRange range2 = [testString2 rangeOfCharacterFromSet:testCharacterSet];
NSLog(@"testString2: %@", (range2.location == NSNotFound) ? @"Good" : @"Bad");
的NSLog輸出:
testString1: Good
testString2: Bad
或使用的RE:
NSString *reString = @"[a-fA-F0-9-]+";
NSString *testString1 = @"ADD2B9F7-A699-4EF3-9A70-130B92154B11";
NSRange range1 = [testString1 rangeOfString:reString options:NSRegularExpressionSearch];
NSLog(@"testString1: %@", (range1.location != NSNotFound && range1.length == testString1.length) ? @"Good" : @"Bad");
NSString *testString2 = @"zDD2B9F7-A699-4EF3-9A70-130B92154B11";
NSRange range2 = [testString2 rangeOfString:reString options:NSRegularExpressionSearch];
NSLog(@"testString2: %@", (range1.location != NSNotFound && range2.length == testString2.length) ? @"Good" : @"Bad");
對於更嚴格的GUID匹配:
NSString *reString = @"[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}";
這是一個非常簡單的和合理的答案。我會接受,因爲它非常簡單。但是,在錯誤的地方,GUID與破折號呢?例子'ABCDE-A ---- A ------- 9'也可以工作,但不是一個有效的GUID。 – 2013-02-10 14:10:11
添加了更嚴格的GUID匹配。 – zaph 2013-02-10 14:25:15
@Zaph不應該是range.location爲零的嚴格匹配? – 2013-07-10 15:37:23
這很酷,我已驗證它 – Jacky 2014-07-09 05:21:49