当前位置: > > > Swift - 字符串的替换与过滤(附:过滤emoji表情符号)

Swift - 字符串的替换与过滤(附:过滤emoji表情符号)

开发中常常会遇到需要将 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)下面代码将字符串中所有的表情符号给过滤掉。
//原始字符串
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
  • 3楼
    2017-09-11 18:41
    Kimi

    航哥,我又來了,剛好需要的東西你也有,我也找到另一個擴展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的,但不会将其过滤。

  • 2楼
    2017-07-04 09:29
    张伟

    十分感谢,希望楼主坚持下去,网站的谷歌排名挺高的了

    站长回复

    不客气。也谢谢你的支持和鼓励,我会坚持下去的。

  • 1楼
    2017-05-04 20:25
    七夕猪

    非常感谢,航歌真棒,在这里学到了很多。

    站长回复

    不客气,欢迎常来看看,我会持续更新下去的。