正則表示式校驗金額最多保留兩位小數
阿新 • • 發佈:2022-06-06
先給出表示式結果:^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$
不熟悉正則表示式的同學,咋一看,一臉懵逼,我們來分解說明一下
正則表示式校驗金額最多保留兩位小數,那麼必須滿足如下條件:
正數金額,如5,10等
一位小數,如5.1, 5.2等
二位小數,如5.12, 5.13等
部分正則表示式符號說明:
^ 匹配輸入字行首
[1-9] 只能取1-9之間的正整數
{1} 前面的表示式只能取一位
\d 正整數,等同於[0-9]
* 前面表示式任意位數
| 或的意思
{1,2} 表示最少重複1次,最多重複2次
? 簡單理解為或有或無
$ 匹配輸入字行尾
第一步,小數點之前表示式
兩種情況:
55.5 不能以0開頭
[1-9]{1}\d*
0.5 開頭為0,並且只有1位
0{1}
兩種情況結合起來:
([1-9]{1}\d*)|(0{1})
第二步,小數點及小數位置
三種情況:
5.1 只有一位小數
5.12 有2位小數
\.\d{1,2}
5 沒有小數
(\.\d{1,2})?
把兩步拼接到一起,就是前面的表示式: (^和$可不加,具體用法見正則表示式中的^和$)
^(([1-9]{1}\d*)|(0{1}))(\.\d{1,2})?$
測試程式碼:
import java.util.regex.Pattern; /** * @author yanghao * @version PatternTest.java, v 0.1 2019-03-28 11:07*/ public class PatternTest { private static final Pattern PATTERN = Pattern.compile("^(([1-9]{1}\\d*)|(0{1}))(\\.\\d{1,2})?$"); public static void main(String[] args){ System.out.println("5 === " + PATTERN.matcher("5").matches()); System.out.println("5. === " + PATTERN.matcher("5.").matches()); System.out.println("5.1 === " + PATTERN.matcher("5.1").matches()); System.out.println("5.12 === " + PATTERN.matcher("5.12").matches()); System.out.println("5.123 === " + PATTERN.matcher("5.123").matches()); System.out.println("0.12 === " + PATTERN.matcher("0.12").matches()); } }
測試結果:
5 === true 5. === false 5.1 === true 5.12 === true 5.123 === false 0.12 === true
————————————————
版權宣告:本文為CSDN博主「湯圓一號」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_43968234/article/details/88865306