2015-02-24 57 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])]; 

它仅仅取决于你想要达到的目标。