這乙個小需求,斷斷續續解決了好久,中間一直存在各種bug,現在基本上已經完全解決,因此,打算從頭到尾記錄一下,方便以後查詢。
開始的時候,還是把需求簡單的說下:
移動端中,彈出系統的數字鍵盤,實現344分割手機號
需求明確之後,下面就是分析需求,然後才能確定實現方式:
明確說明是移動端,那麼也就是說,相容問題不需要考慮太多
如果要彈出系統的數字鍵盤,那麼符合條件的只有一種,那就是type="phone"
的input輸入框
在輸入的時候,實現344分割手機號,這個時候就要監視輸入框中內容的變化,這個可以結合vue的watch
來實現
手機號344分割,那麼輸入框中輸入的最大長度應該就是13了
經過分析可以看出,實際需要使用的知識點並不是很多。分析完成之後,下面就要來具體實現這個需求了。
首先,在寫真正的程式之前,要把結構搭建完成,後續寫**直接在結構中寫就可以了。
首先來搭建html5的**結構,然後自定義input的樣式(方便後續檢視)
定義input輸入框,並設定type
和maxlength
通過v-model
實現資料的雙向繫結
引入vue.js並搭建基本的**結構
在具體實現之前,首先要明白,輸入和輸出的分別觸發什麼樣的操作。
下面,我們把watch中的newvalue
和oldvalue
的值輸出,看一下規律。
phone(newvalue, oldvalue) `)
console.groupend('< === 是否是輸入 === >')
}
當在輸入框中輸入內容的時候:
當在輸入框中刪除內容的時候:
從分析可以看出,在輸入的時候,長度是增加的,刪除的時候,長度是減少的。
在刪除的時候,會出現兩個轉折點,就是在刪除第10個元素或者第5個元素的時候,要自動刪除空格。
很明顯,這裡出現了兩個條件,下標為4的時候和下標為9的時候,要去除字串的空格。
phone(newvalue, oldvalue) else }}
**寫出了之後,看著有些不舒服,有沒有優化方案呢?
再次經過分析會發現,既然在下標為4或9的時候,我們做的事是去除空格,那麼就可以根據去空格的特性(有空格去除空格,無空格不進行處理),直接只做去除空格的操作,不進行判斷了。
phone(newvalue, oldvalue) else
}
現在,刪除的功能實現了,並且**也進行了優化,下面開始實現輸入的操作。
下面來分析一下輸入的問題:
在輸入的時候,當值的長度小於3的時候,肯定是原樣返回的;當值的長度大於等於3且小於7的時候,要增加乙個空格;當長度大於等於7的時候,要增加兩個空格。這個時候就要牽涉到條件判斷了。
另外,在判斷值的時候,肯定是判斷總數字的個數,因此是去除空格的。
phone(newvalue, oldvalue) else if (newvalue.replace(/\s/g, '').length >= 3 && newvalue.replace(/\s/g, '').length < 7) )/, '$1 ')
} else if (newvalue.replace(/\s/g, '').length >= 7) )(\d)/, '$1 $2 ')
}} else
}
我的天哪,這個**怎麼看著那麼亂,應該可以優化的。由於正規表示式是乙個強大的工具,因此,可以結合正則來優化。
首先,我們可以把空格作為分割點,那麼空格之前的內容屬於一組,所以共分三組。第一組的長度為3個數字,第二組和第三組的長度都是0-4個數字,因此,通過正則可以簡化**:
phone(newvalue, oldvalue) )(\d)(\d)/, '$1 $2 $3')
} else
}
上面的**已經基本算精簡了,可是,如果使用三目運算子,還可以更加精簡:
phone(newvalue, oldvalue) )(\d)(\d)/, '$1 $2 $3') : this.phone.trim()
}
至此,該需求已經完成了,最後實際的**只有一句。
其實這個需求很簡單,需要總結的東西不多,因此,在這裡把具體的**實現貼出來,方便後續使用:
結合vue實現移動端頁面的瀑布流布局
結合自己專案的需求進行修改 封裝了wate llflow.vue子元件 wate ll container v for item,index in wate lllist key index class wate ll item style coverimg item.src alt height ...
前端練習02 實現數字千分位分割
輸入乙個數字,將數字按照用逗號分隔,例如輸入1234.56,結果是1,234.56 關鍵點是,這種分隔方法是從右至左的分隔,用普通的slice方法是從左至右的分隔,例如 12345正確的結果是12,345,而用普通的slice方法結果是123,45 如果圖簡單,可以直接使用內建的方法 內建的方法 n...
c 中怎麼實現千位分割符
字母 含義 c或c currency 貨幣格式 d或d decimal 十進位制格式 十進位制整數,不要和.net的decimal資料型別混淆了 e或e exponent 指數格式 f或f fixed point 固定精度格式 g或g general 常用格式 n或n 用逗號分割千位的數字,比如12...