結合Vue實現344分割手機號碼

2021-09-14 08:31:52 字數 2438 閱讀 9161

這乙個小需求,斷斷續續解決了好久,中間一直存在各種bug,現在基本上已經完全解決,因此,打算從頭到尾記錄一下,方便以後查詢。

開始的時候,還是把需求簡單的說下:

移動端中,彈出系統的數字鍵盤,實現344分割手機號
需求明確之後,下面就是分析需求,然後才能確定實現方式:

明確說明是移動端,那麼也就是說,相容問題不需要考慮太多

如果要彈出系統的數字鍵盤,那麼符合條件的只有一種,那就是type="phone"的input輸入框

在輸入的時候,實現344分割手機號,這個時候就要監視輸入框中內容的變化,這個可以結合vue的watch來實現

手機號344分割,那麼輸入框中輸入的最大長度應該就是13了

經過分析可以看出,實際需要使用的知識點並不是很多。分析完成之後,下面就要來具體實現這個需求了。

首先,在寫真正的程式之前,要把結構搭建完成,後續寫**直接在結構中寫就可以了。

首先來搭建html5的**結構,然後自定義input的樣式(方便後續檢視)

定義input輸入框,並設定typemaxlength通過v-model實現資料的雙向繫結

引入vue.js並搭建基本的**結構

在具體實現之前,首先要明白,輸入和輸出的分別觸發什麼樣的操作。

下面,我們把watch中的newvalueoldvalue的值輸出,看一下規律。

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...