正規表示式 匹配貨幣

2021-07-16 13:44:57 字數 2837 閱讀 5613

最近我在學習正規表示式,寫了匹配貨幣的:

☆有兩種驗證方法:

第一種貨幣中不帶「,「

((^[-]?([1-9]\d*))|^0)(\.\d)?$|(^[-]0\.\d$)

第二種貨幣中能帶千分符(英式逗號)時必須帶上

(^[-]?[1-9]\d($|(\,\d)*($|(\.\d$))))|((^[0](\.\d)?)|(^[-][0]\.\d))$

------------------------------------以下是詳細說明----------------------------------

------------------------------------第一種----------------------------------------------

((^[-]?([1-9]\d*))|^0)(\.\d)?$|(^[-]0\.\d$)

允許負數、若有小數點則精確小數點後兩位

允許情況:0、-0.2、-0.22、0.5、0.55、7、-7、-67634534536456.3、-22456.56、78655

不允許情況:-0(負零)、包含-(負號).(小數點)和數字外的其他符號、0213.22、07等等 .........總之格式不對的都不行

分段邏輯:(藍字部分是要說明部分)

(正負號可開頭且後面必須是1-9的數字,數字後面可以跟零到多個數字)或(以零開頭)

如:0、-7、-33、3333、-55653334都能通過驗證

(\.\d)?$|(^[-]0\.\d$)

紅色部分後面如果有小數點,那麼必須以(小數點+1-2位數字)結尾!

(\.\d)?$|(^[-]0\.\d$)

如果這個數字以-0(負零)開頭,那麼必須以(小數點+1-2位數字)結尾!

-------------------------------第二種-------------------------------

(^[-]?[1-9]\d($|(\,\d)*($|(\.\d$))))|((^[0](\.\d)?)|(^[-][0]\.\d))$

帶千分位分隔符、允許負數、可精確到小數點1-2位

允許情況:0、-0.2、-0.22、5、3,324,234、3,234.32、等等正常的貨幣表示法

不允許情況:-0、-03、4562432、3,243.、等等違反規定的表示方法

分段邏輯:

上面是我精簡的,還是上原始版的吧:

(^[-]?[1-9]((\d$)|(\d(\,\d)*$|((\d)(\,\d)*(\.\d$)))))|(^[0](\.\d)?$)|(^[-][0]\.\d$)

這個是原始版的,比較長,但是便於閱讀。

(^[-]?[1-9]((\d$)|(\d(\,\d)*$|((\d)(\,\d)*(\.\d$)))))|(^[0](\.\d)?$)|(^[-][0]\.\d$)

按上面三種顏色分為三種情況,中間用或運算子連線

第一段匹配所有正負號開頭,後面跟1-9數字的情況

二、三段匹配所有以零(0)或者負零(-0)開頭的所有情況

第一段:

(^[-]?[1-9]((\d$)|(\d(\,\d)*$|((\d)(\,\d)*(\.\d$)))))

以正負號開頭且後面必須跟上1-9的數字(後面跟上0-2個0-9的數字並結尾)或(後面跟上0-2個的數字,(再跟上0到多個  逗號+三個數字並結尾))或(後面跟上0-2個的數字,再跟上0到多個  逗號+三個數字,再跟上 小數點+1-2個數字並結尾)。也就是說:

綠色部分匹配如(1、123、-231等不帶逗號的整數);紅色部分匹配如(234,234、1,234 、-1,123 、2,123,123,423等帶逗號不帶小數點的整數);藍色部分匹配如(2.23 、1,231.23 、-1,231.3等帶小數的情況)

第二段:

(^[0](\.\d)?$)

匹配必須以零開頭,可以帶小數的情況。如:0 、0.2 、0.22等

第三段:

(^[-][0]\.\d$)

匹配必須以負零(-0)開頭,並且後面有小數的情況。只匹配例如-0.2 、-0.22兩種情況。

------------------------------------------------總結---------------------------------------------

1、千分符情況也比較特殊,因為千分符的存在,所以對小數點之前的數字討論需要以千分符作為分隔,用以區分幾種不同的情況(如9 、999 、99,222 、999,999,999.33)。

2、零這種情況比較特殊,因為負零(-0)不能單獨存在,必須後面跟小數點和數字結尾,而且零有時還不能作為開頭(如:099就不正確),所以要對零進行分情況討論。

祝 生活愉快!~

正規表示式語法 貨幣

正規表示式語法 正規表示式是一種文字模式,包括普通字元 例如,a 到 z 之間的字母 和特殊字元 稱為 元字元 模式描述在搜尋文字時要匹配的乙個或多個字串。下面是正規表示式的一些示例 表示式 匹配 s 匹配空行。d d 驗證由兩位數字 乙個連字元再加 5 位數字組成的 id 號。s s s s s ...

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...