ios 表情符号 键盘_iOS输入框过滤表情,处理自带键盘无法输入

本片分两部分

1、使用正则表达式过滤表情

2、处理苹果自带键盘无法输入汉字问题

先记录下,后面完善:

override func viewDidAppear(_ animated: Bool) {

super.viewDidAppear(animated)

NotificationCenter.default.addObserver(self, selector: #selector(self.textFieldEditChanged(noti:)), name: Notification.Name.UITextFieldTextDidChange, object: self.inputTextField)

}

override func viewDidDisappear(_ animated: Bool) {

super.viewDidDisappear(animated)

NotificationCenter.default.removeObserver(self, name: Notification.Name.UITextFieldTextDidChange, object: self.inputTextField)

}

@objc fileprivate func textFieldEditChanged(noti: Notification) {

guard let textField = noti.object as? UITextField else {

return

}

// 有高亮的正在输入的字符,不做任何处理

if let _ = textField.markedTextRange {

return

}

guard let endRange = textField.selectedTextRange?.end else {

return

}

guard let regexStr = self.stepType.inputRegex else {

return

}

let cursorPositon = textField.offset(from: textField.endOfDocument, to: endRange)

// 使用正则过滤字符串

let resultStr = Utils.regularRepalce(regexStr, origin: textField.text ?? "")

textField.text = resultStr

if let targetPosition = textField.position(from: textField.endOfDocument, offset: cursorPositon) {

textField.selectedTextRange = textField.textRange(from: targetPosition, to: targetPosition)

}

}

使用给定的正则匹配,不匹配的字符使用空串过滤

/// 对给入的字符串进行正则,未匹配的使用相应的字符替换

///

/// - Parameters:

/// - regexStr: 正则

/// - origin: 原始字符串

/// - template: 喜欢的字符串

/// - Returns: 返回正则处理之后的字符串

public static func regularRepalce(_ regexStr: String, origin: String, template: String = "") -> String {

guard let regex = try? NSRegularExpression(pattern: regexStr, options: []) else {

return origin

}

return regex.stringByReplacingMatches(in: origin, options: [], range: NSRange(location: 0, length: origin.count), withTemplate: template)

}

我使用的正则

1、匹配所有非 空格大小写字母数字中文和下划线 -

"[^ A-Za-z0-9\\u4E00-\\u9FA5_-]" // 中英文空格_-,其他过滤

"[^A-Za-z0-9]" // 非英文数字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值