如何在Swift中从String中删除变音符号(或重音符号)(比如将“één”改为“een”)?我必须回到NSString还是可以在Swift中完成?
String
NSString
velaa5lx1#
您可以直接在Swift String上操作(如果导入了“Foundation”):
let foo = "één" let bar = foo.stringByFoldingWithOptions(.DiacriticInsensitiveSearch, locale: NSLocale.currentLocale()) print(bar) // een
字符串
Swift 3:
let foo = "één" let bar = foo.folding(options: .diacriticInsensitive, locale: .current) print(bar) // een
型
oknrviil2#
更新到@MartinR的答案.一个Swift 3扩展,提供一个用于排序/搜索的字符串,这可能对某人有用.
extension String { var forSorting: String { let simple = folding(options: [.diacriticInsensitive, .widthInsensitive, .caseInsensitive], locale: nil) let nonAlphaNumeric = CharacterSet.alphanumerics.inverted return simple.components(separatedBy: nonAlphaNumeric).joined(separator: "") } }
字符串例如
print("Mÿ nâMe ís jÄço´B".forSorting) // "mynameisjacob"
hkmswyz63#
This is my solution这是我的解决方案
extension String { func unaccent() -> String { return self.folding(options: .diacriticInsensitive, locale: .current) } }
vulvrdjw4#
这也可以通过应用StringTransform来完成:
StringTransform
let foo = "één" let bar = foo.applyingTransform(.stripDiacritics, reverse: false)! print(bar) // een
字符串或实现StringProtocol的自定义属性
StringProtocol
extension StringProtocol { var strippingDiacritics: String { applyingTransform(.stripDiacritics, reverse: false)! } }
let bar = foo.strippingDiacritics print(bar) // een
的数据
xnifntxz5#
Swift 5.0.1的答案更新
Swift 5.0.1
func toNoSmartQuotes() -> String { let userInput: String = self return userInput.folding(options: .diacriticInsensitive, locale: .current) }
字符串使用someTextField.text.toNoSmartQuotes()
someTextField.text.toNoSmartQuotes()
5条答案
按热度按时间velaa5lx1#
您可以直接在Swift
String
上操作(如果导入了“Foundation”):字符串
Swift 3:
型
oknrviil2#
更新到@MartinR的答案.一个Swift 3扩展,提供一个用于排序/搜索的字符串,这可能对某人有用.
字符串
例如
型
hkmswyz63#
This is my solution这是我的解决方案
字符串
vulvrdjw4#
这也可以通过应用
StringTransform
来完成:字符串
或实现
StringProtocol
的自定义属性的数据
xnifntxz5#
Swift 5.0.1
的答案更新字符串
使用
someTextField.text.toNoSmartQuotes()