美文网首页
swift textfield输入手机号 限制11位

swift textfield输入手机号 限制11位

作者: 喵喵粉 | 来源:发表于2020-03-18 14:31 被阅读0次
  • textField的代理

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        
        guard let text = textField.text else { return true }

        /// textField的文本
         let rst = (text as NSString).replacingCharacters(in: range, with: string)
        
        return true
    }
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        
        if textField != tfPhone {
            return true
        }
        
        return validateNumber(textField, range: range, string: string)
    }
fileprivate func validateNumber(_ textField: UITextField, range: NSRange, string: String, limit: Int = 11) -> Bool {
        
        guard let text = textField.text else { return false }

        ///拼接了参数string的afterStr
        let afterStr = text.replacingCharacters(in: text.ext2Range(range)!, with: string)
        DebugLog(afterStr)
        
        ///限制长度
        if afterStr.count > limit {
            textField.text = (afterStr as NSString).substring(to: limit)
            return false
        }
        
        ///是否都是数字
        let set = CharacterSet(charactersIn: "0123456789").inverted
        let filteredStr = string.components(separatedBy: set).joined(separator: "")
        
        if filteredStr == string {
            return true
        }
        
        return false
    }
  • String的扩展
//
// MARK: - range扩展
//
extension String {
    func ext2Range(_ range: NSRange) -> Range<String.Index>? {
        guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }
        guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }
        guard let from = String.Index(from16, within: self) else { return nil }
        guard let to = String.Index(to16, within: self) else { return nil }
        return from ..< to
    }
}

相关文章

网友评论

      本文标题:swift textfield输入手机号 限制11位

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