Swift:如何审查/过滤为脏话等输入的文本?

sky*_*guy 3 ios swift

我只是想看看是否有一种既定的方法来做到这一点,或者人们将如何做到这一点。

我有一个文本字段,它本质上充当我的 iOs 应用程序中的一个表单,用户可以在其中发布一些内容。我不能让用户发布脏话/不恰当的废话,所以如果他们输入的字符串包含这些单词之一,我想过滤掉并显示错误。

Swift 中的其他应用程序是如何做到这一点的?他们只是搜索字符串以查看它是否包含该单词(显然不在其他单词内,而是单独存在)还是有其他方法?

如何准确过滤掉 Swift 用户帖子中的脏话?

dfr*_*fri 6

构建一个您认为是脏话的单词列表,然后简单地检查用户输入的字符串是否包含这些单词中的任何一个。

斯威夫特 3:

import Foundation

func containsSwearWord(text: String, swearWords: [String]) -> Bool {
    return swearWords
        .reduce(false) { $0 || text.contains($1.lowercased()) }
}

// example usage
let listOfSwearWords = ["darn", "crap", "newb"] 
    /* list as lower case */

let userEnteredText1 = "This darn didelo thread is a no no."
let userEnteredText2 = "This fine didelo thread is a go."

print(containsSwearWord(text: userEnteredText1, swearWords: listOfSwearWords)) // true
print(containsSwearWord(text: userEnteredText2, swearWords: listOfSwearWords)) // false
Run Code Online (Sandbox Code Playgroud)

斯威夫特 2.2:

import Foundation

func containsSwearWord(text: String, swearWords: [String]) -> Bool {
    return swearWords
        .reduce(false) { $0 || text.containsString($1.lowercaseString) }
}

// example usage
let listOfSwearWords = ["darn", "crap", "newb"]
/* list as lower case */

let userEnteredText1 = "This darn didelo thread is a no no."
let userEnteredText2 = "This fine didelo thread is a go."

print(containsSwearWord(userEnteredText1, swearWords: listOfSwearWords)) // true
print(containsSwearWord(userEnteredText2, swearWords: listOfSwearWords)) // false
Run Code Online (Sandbox Code Playgroud)

  • @sketchyTech 我刚刚测试过(确保在实际项目中测试,而不是在游乐场中测试),并且如上所述的“reduce”被评估为允许短路;即,在第一次命中(“true”)后它终止。我的猜测是编译器将上面的“reduce”减少(没有双关语)为类似于您建议编辑的手动“for”循环(感谢您的编辑建议!但鉴于结果,我将保留“reduce”解决方案如该评论所述)。 (2认同)