美文网首页Mac OS 开发
限制NSTextField输入格式

限制NSTextField输入格式

作者: _我和你一样 | 来源:发表于2019-07-08 18:24 被阅读0次

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

我想实现当用户输入手机号时,只能输入 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
    }

相关文章

  • 限制NSTextField输入格式

    格式化可以验证输入的有效性,这里有苹果的官网文档:数据格式化 我想实现当用户输入手机号时,只能输入 11 位数字,...

  • Mac app 开发之-NSTextField 输入框

    在上一篇文章中讲述了如何使用 NSTextField展示文本,这一篇章就要讲如何NSTextField输入文字。 ...

  • NSTextField

    一.两种 NSTextField:输入基本文字NSSecureTextField:输入密码 二.属性 三.协议

  • textField 输入金额的限制

    由于开发中用到金额输入,需要对 textField 输入框做限制,保证输入金额格式的合法性,现对限制规则做以下总结...

  • macOS开发-NSTextField

    NSTextField 简介 输入框,主要用于用户输入文本,同 iOS里的UITextField 在macOS开发...

  • UITextField输入限制

    格式化手机号 | 格式化卡号 | 设置光标位置 在开发的过程中,经常会有产品要求输入框的输入字符限制类型,手机号或...

  • 测试自我要求

    客户端校验 1. input输入测试 使用maxlength属性初步限制长度 正则判定数字字母等输入的格式和长度 ...

  • antd-Input

    1、输入框输入长度限制 达到长度的最大值就不能在输入了,不需要任何js 2、Input 上传文件: 上传文件的格式...

  • iOS 所有对textField的变态限制

    限制输入金额的输入框 支付时输入框 限制textField输入字数 包含中文、字母 普通字母 输入限制 限制输...

  • ios UITextField电话号码自动格式化

    第一次写东西,也是借鉴两位前辈的 iOS高度封装格式化手机号,银行卡输入样式,限制输入内容 - 简书 iOS格式化...

网友评论

    本文标题:限制NSTextField输入格式

    本文链接:https://www.haomeiwen.com/subject/nobahctx.html