如何阻止用户在Swift 3中写入诅咒单词?
问题描述:
我使用斯威夫特3和火力创建一个社交应用,用户可以使职位,但事情是,我不希望用户使用骂人的话。如何阻止用户在Swift 3中写入诅咒单词?
有没有办法像取代这些词当用户写他们?
目前用户使用文本视图写他们想发布的东西...
我怎样才能做到这一点像最简单,最简单的方法是什么?
我在找答案,我发现这个问题Swift: how to censor/filter text entered for swear words, etc?。
这个答案代码:
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
但我真的不明白这一点。我如何在我的项目中实现?我应该在哪里粘贴该代码?或者我如何将该代码链接到我的文本视图?它在代码中缺少的东西应该是什么?
答
如果在.editingChanged事件上使用UITextField。
inputTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged)
func textFieldDidChange(_ textField: UITextField) {
print(containsSwearWord(text: textField, swearWords: listOfSwearWords)) // Here you check every text change on input UITextField
}
UPDATE
输入端
之前在textViewShouldEndEditing(_ textView: UITextView)
验证用户输入您必须实现UITextViewDelegate(Official Documentation)
验证并返回true/false来允许编辑结束。
输入端
在textViewDidEndEditing(_ textView: UITextView)
验证用户输入并显示任何警告,如果您发现不准的话验证了。
答
这就是我该怎么做的。
- 通行证的TextView文字的NSString
- 转换的NSString的NSArray
- 检查,看看是否能NSArray中包含你的诅咒字符串之一。如果确实如此,那就用****或其他东西代替它。
这就是它在Objective-C中的样子。
NSString *textViewStr = myTextView.text;
NSArray *myArray1 = [textViewStr componentsSeparatedByString:@" "]; //this will put all words separated by space into an array
if ([myArray1 containsObject:@"crap"]) {
//found one
textViewStr = [textViewStr stringByReplacingOccurrencesOfString:@"crap"
withString:@"duck"];
}
虽然使用谷歌搜索,我发现了另一个更好的答案。
//If you want multiple string replacement:
NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo
但是,如果我使用一个UITextView会发生什么?我仍然不明白! 谢谢。 – killerwar557
我已经更新了我对UITextView用法的回答。 – sergiog90