从NSString中删除非字母数字字符


69

我正在寻找一种快速简便的方法来从中剥离非字母数字字符NSString。可能是使用的东西NSCharacterSet,但是我很累,似乎什么也不会返回仅包含字母数字字符的字符串。


5
+1是正确标记为可可而不是客观C的5%的问题之一
Nektarios

Answers:


144

我们可以先拆分然后再加入。需要OS X 10.5+的组件SeparatedByCharactersInSet:


2
什么是字母数字字符?例如,德国“ Umlaute”(如ä,ö或ü)是否包含在集合中,因此不作修剪?
Erik 2013年

3
要处理带重音符号,您需要创建一个NSMutableCharacterSet,它是alphanumericCharacterSet和nonBaseCharacterSet的并集,并将其反转
Greg Fodor

1
trimmedReplacement是误导。在所有iOS NSString调用中,修剪表示从开始到结束。我可以建议代替出现的replacementstrippedReplacement吗?
SwiftArchitect 2015年

@Erik,会包含变音符号。这使得它对于文件名不可用:(
datayeah 2015年

4
@datayeah不用担心,只需按照pubs.opengroup.org/onlinepubs/9699919799/basedefs/…更改第一行以反转“便携式文件名字符集” :NSCharacterSet *charactersToRemove = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-"] invertedSet];
Erik

21

在Swift中,componentsJoinedByString替换为join(...),因此此处仅将非字母数字字符替换为空格。


对于Swift2 ...

如果您只想删除一个字符,例如删除所有返回...


19

我最后要做的是创建一个NSCharacterSet和-invertedSet我发现的方法(这很奇怪,对于文档阅读功能来说,额外的一小时的睡眠有什么作用)。这是代码段,假设这someString是您要从中删除非字母数字字符的字符串:

trimmedReplacement然后将包含someString的字母数字字符。


26
仅供参考,stringByTrimmingCharactersInSet:仅删除字符串开头和结尾的字符。也许这就是您想要的。
肯·阿斯佩斯拉格

嗯,好点,肯。我不知道 它仍然可以满足我的需求,但这很高兴。
杰夫·凯利

7

Swift 3版本接受的答案:


1

清理类别

我有一个方法调用stringByStrippingCharactersInSet:,并stringByCollapsingWhitespace可能是方便刚落项。


0

这是Cameron类别的Swift版本作为扩展:


"".join(componentsSeparatedByCharactersInSet(set))更好。
克拉斯2015年

0

我认为简单的周期是更快的执行时间:


0

这是比提供的答案更有效的方法

或作为类别

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.