最近我在學習正規表示式,寫了匹配貨幣的:
☆有兩種驗證方法:
第一種貨幣中不帶「,「
((^[-]?([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 均不匹配 解法 首先要想到用遞迴處理...