js實現數字金額千分位逗號分開格式化

const formatter = (num) => {
    const reg = /^\d*$/
    if(!reg.test(num)){
        throw '輸入內容有誤!請輸入數字'
    }else{
        return String(num).replace(/\d{1,3}(?=(\d{3})+(\.|$))/g,'$&,')
    }
}

var str = formatter(1234567)

console.log('str', str)

答案是有了,諸位有木有思考過這個正則的意義呢?

科普一下:

1、正則表達式 - 語法

2、正則表達式 - 元字符

3、JavaScript replace() 方法

上述正則表達式分析:

\d{1, 3} 

\d :代表匹配數字字符串

{1, 3} : 代表1 - 3位字符串

/d{1, 3} : 代表匹配到字符串爲1-3位的,比如 : '123', '12345', 'w123'

 ?=

這個規則就高級那麼點點了,查文檔你會發現它的定義是:正向肯定預查(look ahead positive assert),在任何匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。

+  匹配一次或者多次

\.  這裏是匹配小數點,因爲前面加了轉義字符(\)

或者

$ 匹配輸入字符串的結束位置

$&  與 regexp 相匹配的子串

再將正則可視化一下吧! 網站 正則可視化

 

最後用自己的話理解:

\d{1, 3} 匹配1-3位的數字,但是後面必須還得接着 “多個以三位數字爲一組”的字符串,以數字三位數字結尾或者小數點結尾,匹配成功了,就在匹配到的字符串後面加上逗號。

 

各位道友意覺如何呀,歡迎指導!

 

參考:

JS實現千分位

【筆記】數字千分位格式化問題之正則表達式

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章