Swift - 字符串的替换与过滤(附:过滤emoji表情符号)
作者:hangge | 2017-04-17 08:10
开发中常常会遇到需要将 String 字符串中的特殊符号给过滤掉,或者将某些子字符串替换成其他的内容,下面通过样例进行演示。
一、字符串替换
1,简单的替换
下面将字符串中所有的 com 替换成 COM。
//原始字符串 let str1 = "欢迎访问hangge.com.com.com" //替换后的字符串 let str2 = str1.replacingOccurrences(of: "com", with: "COM") //打印结果 print("原字符串:\(str1)") print("新字符串:\(str2)")
2,使用正则表达式替换
(1)为方便使用,我们这里对 String 做个扩展,增加正则替换相关方法。import Foundation extension String { //返回字数 var count: Int { let string_NS = self as NSString return string_NS.length } //使用正则表达式替换 func pregReplace(pattern: String, with: String, options: NSRegularExpression.Options = []) -> String { let regex = try! NSRegularExpression(pattern: pattern, options: options) return regex.stringByReplacingMatches(in: self, options: [], range: NSMakeRange(0, self.count), withTemplate: with) } }
(2)下面代码我们将字符串中所有的英文字母替换成下划线。
//原始字符串 let str1 = "欢迎访问hangge.com" //替换后的字符串 let str2 = str1.pregReplace(pattern: "[a-zA-Z]", with: "_") //打印结果 print("原字符串:\(str1)") print("新字符串:\(str2)")
二、字符串过滤
这个同样可以通过字符串替换的方法实现,即将需要过滤掉的字符串替换成空字符串。1,简单的过滤
下面将字符串中所有的 com 过滤掉。//原始字符串 let str1 = "欢迎访问hangge.com.com.com" //替换后的字符串 let str2 = str1.replacingOccurrences(of: "com", with: "") //打印结果 print("原字符串:\(str1)") print("新字符串:\(str2)")
2,使用正则表达式过滤
(1)为方便使用,我们这里对 String 做个扩展,增加正则替换相关方法。
(2)下面代码将字符串中所有的表情符号给过滤掉。
//具体方法见上方“正则表达式替换”部分
(2)下面代码将字符串中所有的表情符号给过滤掉。
//原始字符串 let str1 = "欢迎🆚访问💓😄hangge.com" //判断表情的正则表达式 let pattern = "[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]" //替换后的字符串 let str2 = str1.pregReplace(pattern: pattern, with: "") //打印结果 print("原字符串:\(str1)") print("新字符串:\(str2)")
全部评论(3)
航哥,我又來了,剛好需要的東西你也有,我也找到另一個擴展String的方式去匹配emoji,但我不知道有沒有什麼問題,對編碼研究不深,但還是跟你分享,你應該能了解。
extension String {
var containsEmoji: Bool {
for scalar in unicodeScalars {
switch scalar.value {
case
0x00A0...0x00AF,
0x2030...0x204F,
0x2120...0x213F,
0x2190...0x21AF,
0x2310...0x329F,
0x1F000...0x1F9CF:
return true
default:
continue
}
}
return false
}
}
站长回复:谢谢你的分享。这个代码是可以用来判断字符串中是否包含emoji的,但不会将其过滤。
十分感谢,希望楼主坚持下去,网站的谷歌排名挺高的了
站长回复:不客气。也谢谢你的支持和鼓励,我会坚持下去的。
非常感谢,航歌真棒,在这里学到了很多。
站长回复:不客气,欢迎常来看看,我会持续更新下去的。