Swift中如何为特殊字符过滤功能添加单引号与双引号过滤?
解决UITextView单引号、双引号未被过滤的问题
你的代码问题出在字符集构造错误,导致单引号和双引号没被正确纳入过滤范围,同时还存在HTML转义字符的误用(<和>是HTML转义格式,实际代码里应该用<和>本身)。
修正方案
1. 基础修正版(适配原逻辑)
直接把单引号、双引号写入初始字符集合字符串,同时修正转义字符问题:
func textViewDidChange(_ textView: UITextView) { guard var textViewText = textView.text else { return } // 直接包含单引号、双引号,以及正确的<、>字符 let specialCharacterSet = CharacterSet(charactersIn: "₹!@#$%^&*()_+{}[]|<>?;=-'\"") if let range = textViewText.rangeOfCharacter(from: specialCharacterSet) { textViewText = textViewText.replacingCharacters(in: range, with: "") textView.text = textViewText let alertController = UIAlertController(title: "错误", message: "不允许输入特殊字符!", preferredStyle: .alert) alertController.addAction(UIAlertAction(title: "确定", style: .default, handler: nil)) present(alertController, animated: true, completion: nil) } }
2. 优化体验版(提前拦截输入)
用textView(_:shouldChangeTextIn:replacementText:)方法在字符插入前拦截,避免"先插入再删除"的冗余操作,体验更流畅:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { let specialCharacterSet = CharacterSet(charactersIn: "₹!@#$%^&*()_+{}[]|<>?;=-'\"") if text.rangeOfCharacter(from: specialCharacterSet) != nil { let alertController = UIAlertController(title: "错误", message: "不允许输入特殊字符!", preferredStyle: .alert) alertController.addAction(UIAlertAction(title: "确定", style: .default, handler: nil)) present(alertController, animated: true, completion: nil) return false // 直接阻止特殊字符输入 } return true }
内容的提问来源于stack exchange,提问作者Sanjug Sonowal
相关产品推荐
相关产品推荐

