蘋果輸入手機號變用戶的名字

来源:http://www.cnblogs.com/doujiangyoutiao/archive/2017/05/24/6898598.html
-Advertisement-
Play Games

  今天我們的用戶輸入手機號之後變成了用戶的名字,沒辦法獲取驗證碼,因為手機格式不對。我還是頭一次遇到這樣的事情。 1.文本替換   遇到這種事情肯定去百度啊,發現還真有人和我遇到相同的情況,原來這個用戶在設置 》通用 》鍵盤 》文本替換把自己的手機號設置自己 ...


  今天我們的用戶輸入手機號之後變成了用戶的名字,沒辦法獲取驗證碼,因為手機格式不對。我還是頭一次遇到這樣的事情。

手機號變姓名.png

1.文本替換

  遇到這種事情肯定去百度啊,發現還真有人和我遇到相同的情況,原來這個用戶在設置-》通用-》鍵盤-》文本替換把自己的手機號設置自己的名字了,這樣只要在UITextField中輸入自己的手機號,輸入完就會變成自己的名字,出現上圖的情況。
文本替換.png
其實這個功能還是滿好玩的,不過用戶要是把自己的手機號設置文本替換了,那麼在APP里註冊就會出現問題了。當時我就想是不是微信也這樣啊,

微信.png
看來微信已經解決了這個問題,他手機號中間加了兩個空格,而文本替換是不允許加空格的,所以可以正常完成登錄。這裡不得不為微信的工程師們點贊啊!不過淘寶更厲害,沒有加空格,也沒有進行文本替換,真是厲害啊。我又去看了其他App,基本上都是用空格來防止文本替換的,但是也有一些註冊登錄不了的,有興趣的可以去嘗試。

2.用空格防止文本替換

#pragma mark - UITextFieldDelegate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == _txtUserName) {
        // 12312345678-> 123 1234 5678
        if (range.location == 3 || range.location == 8) {
            
            textField.text = [textField.text stringByAppendingString:@" "];
        }
        // 手機號最多輸13位 包含兩個空格,防止文本替換
        if(range.location >= 13){
            return NO;
        }
    }
    return YES;
}

  這樣就成功的防止文本替換了,因為文本替換不能包含空格。但是我又發現刪除不了了,就是當刪除到空格的時候就不能繼續刪除了。難道是數字鍵盤裡不能刪除空格???後來我分析代碼發現當我刪除到空格的時候,就會自動幫我在後面再加上一個空格,這樣我就永遠把空格刪除不了了。所以我要區分只有在輸入的時候添加空格,刪除到123 1234 5678的5時,自動把5前面的空格去掉。

3.區分輸入和刪除

  當UITextField刪除的時候執行- (void)deleteBackward;方法,這個方法在UIKeyInput協議中。那這就好辦了,自定義UITextField的,重寫- (void)deleteBackward;,這個方法一執行,就發通知,或者走代理,都可以。後來我發現這有點麻煩,我還要自定義,發通知/代理,太麻煩了。所以我就想通過監測UITextField的location來區分輸入或刪除。

#pragma mark - UITextFieldDelegate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == _txtUserName) {
        // 刪除
        if (_lastLocation > range.location) {
            
            if (range.location == 9 || range.location == 4) {
                // 刪除到空格後一位的時候,自動把空格也去掉
                textField.text = [textField.text substringToIndex:range.location];
            }
            _lastLocation = range.location - 1;
            return YES;
            
        }else {
            // 輸入
            if (range.location == 3 || range.location == 8) {
                
                textField.text = [textField.text stringByAppendingString:@" "];
            }
        }
        _lastLocation = range.location;
        // 手機號最多輸13位 包含兩個空格,防止文本替換
        if(range.location >= 13){
            return NO;
        }
    }
    return YES;
}

  其實用戶一多,對開發者來說成長會非常快,因為什麼情況都會遇到,我們就在解決問題中成長。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ZKEACMS的導航預設是不能固定的,隨著頁面的滾動而滾動,為了有更好的用戶體驗,當頁面往下滾動時,可以將導航固定在頂端,這樣方便用戶點擊。 ...
  • 一.什麼是vuex Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。簡單來說就是一個數據統一管理工具 二.如何使用vuex 首先肯定是要下載vuex ,使用 npm install vuex ...
  • 如何在Mac OS X上安裝 Ruby運行環境 對於新入門的開發者,如何安裝 Ruby和Ruby Gems 的運行環境可能會是個問題,本頁主要介紹如何用一條靠譜的路子快速安裝 Ruby 開發環境。 此安裝方法同樣適用於產品環境! 系統需求 首先確定操作系統環境,不建議在 Windows 上面搞,所以 ...
  • Origin : 今天做了一個小實驗, 從 bq25890 spec 可以知道, enable bq25896 充電的功能,有二個條件, 1。CHG_CONFIG bit 需為1。 2。ce pin 需為 low。 如上圖紅線所圈的, jumper 插下去是 ce 接 low, 拿掉 jumper, ...
  • 最近項目的有個需求是點擊購買資料按鈕進入淘寶界面,簡單分析一下,如果用戶手機有淘寶就打開淘寶的頁面,沒有的話也可以選擇使用webView進行展示,還是使用手機瀏覽器進行展示。 判斷有無淘寶的代碼就不貼了,在webView展示的代碼也不貼,相信度娘上都有,下麵就是跳轉淘寶商品詳情的頁面 ...
  • Origin : 今天在做實驗時, 將手機接上假電, 假電接 power supply, 直接開啟 power supply (電壓初始值為 0V), 突然聞到一陣怪味, 之後手機再也開不起來了。 Conclusion : 雖然 power supply 一開啟的電壓初始值是設為 0V, 但在 ou ...
  • 《Android高薪之路:Android程式員面試寶典》取材於各大IT公司面試真題,所給出的試題儘可能地覆蓋了Android應用開發的各個方面,而且大多數試題都有解析部分,讀者可以通過這部分更深入地理解試題中所包含的技術內容,希望真正做到由點成線,舉一反三。 書中還將Android中涉及的各個常用技 ...
  • 在這本書中,我會使用Kotlin作為主要的語言來開發一個android應用。方式是通過開發一個應用來學習這門語言,而不是根據傳統的結構來學習。我會在感興趣的點停下來通過與Java1.7對比的方式講講Kotlin的一些概念和特性。用這種方法你就能知道它們的不同之處,並且知道哪部分語言特性可以讓你提高你 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...