2015-02-24 90 views
0

我想從字符串中刪除所有符號,它適用於除「?」以外的所有符號的以下代碼。刪除「?」從NSString IOS

NSString *newString = self.titleString; 

NSArray *characters = @[@"<", @"!", @"@", @"#", @"$", @"%", @"^", @"&", @"*", @"(", @")", @",", @"_", @"+", @"|", @">", @"?", @" "]; 

for (NSString *str in characters) { 
    newString = [newString stringByReplacingOccurrencesOfString:str withString:@""]; 
} 
+2

我試過你給定的代碼sniped其工作正常甚至與?它正在工作,它從string.i中移除,在代碼@「Hello 1234?>()?」中使用以下字符串,然後放出「Hello1234」。所以請你能告訴你使用哪個字符串創建問題。 – user1548843 2015-02-24 14:20:23

回答

1

您可以刪除所有字符使用NSRegularExpression一個電話:

NSString *string = self.titleString; 
NSError *error = nil; 
// Prepare the regular expression that matches any of your characters 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[<>[email protected]#$%^&*(),_+?| ]" 
    options:NSRegularExpressionCaseInsensitive 
    error:&error]; 
// Replace all matches with an empty string 
string = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""]; 
+0

儘管在OP的問題中沒有明確表示,但正則表達式如何在不同語言中捕捉標點符號呢? – 2015-02-24 14:25:06

+0

@StephenFurlani我不認爲正則表達式可以做到這一點:即使POSIX'[:punct:]'有一組預定義的字符。 – dasblinkenlight 2015-02-24 14:31:45

+0

如果你想匹配標點符號,它是'\\ p {P}'。但是這不會涵蓋許多OP的字符(例如貨幣符號),這些字符將由'\\ p {S}'覆蓋。然後用'\\ s'或'\\ p {Z}'分隔空格。坦率地說,在這些情況下,從另一個方向走向,即允許什麼符號(例如'[^ a-zA-Z]'或'\\ P {L}')往往更安全。 – Rob 2015-02-24 14:46:26

0

你必須逃離?這樣的: 「\?」。否則它將無法正常工作。 ?只有在正則表達式中代表0或1次出現,所以你必須對objective-c說它是一個你想測試的真正的字符。

0

如果這是爲了編輯用戶文本,您可能需要考慮使用多於一個的聯合NSCharacterSet - 當您本地化/國際化您的應用程序時,這將有助於它更加語言友好。

NSString *myInputText = @"asd;[email protected]$%^%$&1asldiguhd"; 
NSCharacterSet *nonAlphanumeric = [[NSMutableCharacterSet alphanumericCharacterSet] invert]; 
NSArray *parts = [myInputText componentsSeparatedByCharactersInSet:nonAlphanumeric]; 
NSArray *mySafeOutputText = [parts componentsJoinedByString:@""]; 

這是一個有點不直觀的使用方法components,但遺憾的是蘋果公司不提供stringByReplacingCharactersInSet:方法。 :(

1

您可以使用stringByReplacingOccurrencesOfString正則表達式選項,NSRegularExpressionSearch

NSString *output = [input stringByReplacingOccurrencesOfString:@"[<>[email protected]#$%^&*(),_+?| ]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [input length])]; 

您也可以利用其他的正則表達式的功能,如更換所有非字母字符:

NSString *output = [input stringByReplacingOccurrencesOfString:@"\\P{L}" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [input length])]; 

AZ:

NSString *output = [input stringByReplacingOccurrencesOfString:@"[^a-zA-Z]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [input length])]; 

它僅僅取決於你想要達到的目標。