swift - 在swift中将hypens添加到车辆登记号
问题描述
当用户输入车辆登记号时,我需要在文本字段中添加连字符。例如,在用户键入时将其设为 KA-01-BR-1234。我已经实现了下面的方法,但是如果有的话,我正在寻找一种更好的方法来做到这一点。任何答案都会有所帮助。谢谢
我试过这样的事情:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField.tag == 909090 {
if textField.text!.count > 13 {
return false
}
if range.length == 0 && (range.location == 2 || range.location == 5 || range.location == 8) {
textField.text = "\(textField.text!)-\(string)"
return false
}
return true
}
return true
}
如果用户输入KA01R1234(缺少 B),这将不起作用。
我的第二种方法是这样的(仍然很糟糕,但目前有效):
extension String {
///Add Hypen for Vehicle Registration No.
func addHypen() -> String {
var finalStr = ""
self.forEach { (charact) in
if let newStr = finalStr.last, (newStr.isLetter && charact.isNumber) || (newStr.isNumber && charact.isLetter) {
finalStr.append("-")
finalStr.append(charact)
} else if !charact.isWhitespace || !charact.isSymbol || !charact.isMathSymbol {
finalStr.append(charact)
}
}
return finalStr.replacingOccurrences(of: "/", with: "-")
}
}
然后在以下情况下调用字符串上的函数textFieldDidEndEditing
:
textfield.text = textfield.text.addHypen()
任何更好的解决方案,欢迎!
解决方案
推荐阅读
- java - Cannot understand how to implement Memoization of a function with Guava
- r - R - 按月过滤数据
- python - 在python中的某个索引处更改第二个列表中的元素
- c# - C#多线程出队列表
- c++ - C ++:静态成员函数为具有私有构造函数的类返回自静态对象
- python - Python Pandas:尝试在 date_range 操作中加快每个日期的每行
- python - 如何使用 tf.keras 模型从 keras 模型复制结果(或找到差异)?
- java - 使用 CompletableFuture 的并发数据库调用
- asp.net-mvc - 如何从客户模型中选择所有下订单的客户orderby 购买数量
- replace - 使用带有特殊字符的 JREPL