2012-07-21 66 views
0

我需要從NSString中刪除/替換除字母數字以外的所有字符, - ,&。我如何構建我的正則表達式來實現該目標 我想確保用戶不會輸入字母數字,&以外的任何字符和 - 在uitextfield中。我怎樣才能做到這一點。以前我處理的東西在shoulchangecharactersineange,但現在過濾器越來越大,以處理通過條件。正則表達式可能是我的場景的最佳選擇。我會認識你的想法和輸入ios的正則表達式

+0

也許你能告訴我們你的'shouldChangeCharactersInRange',但TC的回答顯示了它是如何的簡單。無論您使用7位字符集,還是將其擴展爲支持常見的歐洲語言(例如jonkroll),都取決於您。但無論如何,這應該非常簡單。 – Rob 2012-07-21 04:05:04

回答

1
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)r replacementString:(NSString*)s 
{ 
    NSCharacterSet * reject = [[NSCharacterSet characterSetWithCharactersInString:@"QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-&"] invertedSet]; 
    if ([s rangeOfCharacterFromSet:reject].length) 
    { 
    return NO; 
    } 
    return YES; 
} 
0

你可以使用NSString方法rangeOfCharctersFromSet:來做這個檢查。

首先構造一個包含允許字符的字符集,然後使用invertedSet獲取一組所有不允許的字符。然後在你的字符串中搜索這個集合中的字符範圍。如果在該組中的字符被發現的回覆範圍值將是{NSNotFound, 0}

NSMutableCharacterSet *legalCharacters = [NSCharacterSet alphanumericCharacterSet]; 
[legalCharacters addCharactersInString:@"-&"]; 
NSCharacterSet *illegalCharacters = [legalCharacters invertedSet]; 

NSString *testString = @"[email protected]#$%"; 

if ([testString rangeOfCharacterFromSet:illegalCharacters].location == NSNotFound) { 
    // string passed validation 
} else { 
    // string failed validation 
} 
+0

'[NSCharacterSet alphanumericCharacterSet]'返回* Unicode *「字母」和「數字」(例如包括所有漢字)的集合。這可能不是預期的。 – 2012-07-21 03:30:56

+1

這取決於原始問題的作者是如何限制的,但我個人討厭沒有正當理由拒絕常見重音字符的應用程序。例如,如果這是捕獲專有名稱,它不應該強迫某人更改他們的名字,因爲該應用程序存在於7位世界中!我個人會認爲jonkroll的字符集(但在'shouldChangeCharactersInRange'中使用它),除非有一些應用程序需求排除它。 – Rob 2012-07-21 04:08:30

+0

@RobertRyan你絕對正確:) – 2012-07-21 05:39:50