限制NSTextField输入格式

格式化可以验证输入的有效性,这里有苹果的官网文档:数据格式化

我想实现当用户输入手机号时,只能输入 11 位数字,并且在输入过程中,对数字进行分组。分组使用空格。类似于"187 3897 1797"这种格式。
那么我继承了一个 NumberFormatter来实现这个需求
重写下面这个方法,来验证输入的有效性

     override func isPartialStringValid(_ partialString: String, newEditingString newString: AutoreleasingUnsafeMutablePointer<NSString?>?, errorDescription error: AutoreleasingUnsafeMutablePointer<NSString?>?) -> Bool {
        
        if partialString.isEmpty {
            return true
        }

        if partialString.count > 13{
            return false
        }
        
        return Int(partialString.replacingOccurrences(of: " ", with: "")) != nil
    }

初始化方法,配置了一些基本的格式信息:

   private func basicInit() {
        format = "###,####,####"
        groupingSeparator = " "
        isLenient = true
    }

为了在输入过程中就自动分组,我实现了 TextField 的代理,重写了文本已经改变的方法:

    func controlTextDidChange(_ obj: Notification) {
        if let phoneTextFiled = obj.object as? NSTextField {
            if phoneNumberTextField == phoneTextFiled {
                _ = phoneTextFiled.stringValue
            }
        }
    }

上面的方法只是读取了下最新的值,并没有使用。如果我不去访问值,就不会触发实时分组,我也不知道为何,所以就这么写了。

至于如何校验字符串是不是手机号,宽泛一些用正则表达式来进行处理:

   static func isLegalForPhoneNumber(phoneNumerStr:String)->Bool{
        let phoneStr =  phoneNumerStr.replacingOccurrences(of: " ", with: "")
        guard phoneNumerStr.count > 0 else {
            return false
        }
        // - 1、创建规则
        let pattern1 = "1[0-9]{10}"
        // - 2、创建正则表达式对象
        let regex1 = try! NSRegularExpression(pattern: pattern1, options: NSRegularExpression.Options.caseInsensitive)
        // - 3、开始匹配
        let res = regex1.matches(in: phoneStr, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, phoneStr.count))
        // 输出结果
        return res.count > 0
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、简介 <<UITextField(文本框) : UITextField被用作项目中获取用户信息的重要控件.在A...
    无邪8阅读 11,002评论 0 1
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,910评论 1 32
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 11,329评论 0 10
  • //初始化textfield并设置位置及大小 UITextField *text = [[UITextField ...
    卟吃兎孒的罗卜阅读 8,936评论 0 2
  • 诗歌创作的道路是需要引领的,引领者就是那些国家级报刊的编辑、主编。因为报刊发表的东西就是导向和标尺。年轻读者和作者...
    苏怀亮文字阅读 3,218评论 2 4

友情链接更多精彩内容