You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何为特殊字符过滤功能添加单引号与双引号过滤?

解决UITextView单引号、双引号未被过滤的问题

你的代码问题出在字符集构造错误,导致单引号和双引号没被正确纳入过滤范围,同时还存在HTML转义字符的误用(&lt;和&gt;是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:51:20