[Swift]UITextField限制只输入中文/英文/数字/中文和英文 等

本文介绍了如何在iOS应用中限制UITextField的输入,通过Swift代码实现对特定字符类型的过滤,并展示了用于限制输入的正则表达式。示例代码包括监听UITextField的编辑变化,以及限制输入为特定字符集的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

限制UITextField输入约定之外的字符

import UIKit

class SetAliVC: UIViewController {

    @IBOutlet weak var field_name: UITextField!
    @IBOutlet weak var field_account: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.field_name.addTarget(self, action: #selector(changedTextField(_:)), for: .editingChanged)
        self.field_account.addTarget(self, action: #selector(changedTextField(_:)), for: .editingChanged)
    }

    /// 监听textFiled输入框
    @objc func changedTextField(_ textField: UITextField) {
        if textField.tag == 5690 {
            textField.limitInputWithPattern(pattern: "[^A-Za-z\\u4E00-\\u9FA5]", 20)
        } else if textField.tag == 5691 {
            textField.limitInputWithPattern(pattern: "[^A-Za-z0-9_@.:/]")
        }
    }

}

拓展

extension UITextField {

    /// 限制textField输入
    public func limitInputWithPattern(pattern: String, _ limitCount: Int = -1) {
        // 非markedText才继续往下处理
        guard let _: UITextRange = self.markedTextRange else {
            // 当前光标的位置(后面会对其做修改)
            let cursorPostion = self.offset(from: self.endOfDocument, to: self.selectedTextRange!.end)
            // 替换后的字符串
            var str = ""
            if pattern == "" {
                str = self.text!
            } else {
                str = self.text!.regularReplace(pattern: pattern, with: "")
            }
            // 如果长度超过限制则直接截断
            if limitCount >= 0, str.count > limitCount {
                str = String(str.prefix(limitCount))
            }
            self.text = str
            // 让光标停留在正确位置
            let targetPostion = self.position(from: self.endOfDocument, offset: cursorPostion)!
            self.selectedTextRange = self.textRange(from: targetPostion, to: targetPostion)
            return
        }
    }

}
extension String {

    // 使用正则表达式替换
    func regularReplace(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)
    }

}

常用的一些正则表达式:

非中文:[^\\u4E00-\\u9FA5]
非英文:[^A-Za-z]
非数字:[^0-9]
非中文或英文:[^A-Za-z\\u4E00-\\u9FA5]
非英文或数字:[^A-Za-z0-9]
非英文或数字或下划线:[^A-Za-z0-9_]

非邮箱:"[^A-Za-z0-9@.]"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值