Swift中如何匹配并移除URL字符串内被括号包裹的数字?
iOS 括号包裹数字移除解决方案
原有代码问题
- Swift 原生的
String.contains()方法仅支持普通字符串匹配,无法识别正则表达式规则,你编写的正则判断条件永远不会触发 trimmingCharacters(in:)仅会移除字符串首尾匹配字符集的字符,无法处理字符串中间出现的(数字)内容- 原有正则规则未适配多位数场景,无法匹配
(12)这类多位数括号内容
正确实现
你可以直接使用支持正则匹配的字符串替换方法实现需求,同时监听输入框的内容变化事件实时处理输入内容:
- 核心字符串处理方法
/// 移除字符串中所有被括号包裹的数字 func removeBracketedNumbers(from input: String) -> String { // 正则规则:匹配左括号 + 1个及以上数字 + 右括号 let pattern = "\\(\\d+\\)" return input.replacingOccurrences(of: pattern, with: "", options: .regularExpression) }
- 绑定输入框实时处理
在viewDidLoad中添加输入框内容变化监听:
urlField.addTarget(self, action: #selector(textFieldContentDidChange), for: .editingChanged)
实现监听回调方法:
@objc func textFieldContentDidChange(_ textField: UITextField) { guard let originalText = textField.text else { return } let processedText = removeBracketedNumbers(from: originalText) // 仅在内容有变化时赋值,避免无限触发监听回调 if processedText != originalText { DispatchQueue.main.async { textField.text = processedText } } }
效果验证
- 输入
stackoverflow.com(1),处理后输出stackoverflow.com - 输入
abc(23)def(456)xyz,处理后输出abcdefxyz
内容的提问来源于stack exchange,提问作者MaryLitv21
相关产品推荐
相关产品推荐

