[英]Java regex to check if string is valid number format (comma and decimal point placing)
1000 - valid
1,000 - valid
1,000.00 - valid
1000.00 - valid
1000.00.00 - invalid
1,0.00 - invalid
1,000,00.00 - invalid
1,000,000.12 - valid
小數位數不能無限
我一直在嘗試找到正確的正則表達式模式,似乎找不到能夠適應所有驗證的模式。 誰能幫忙
模式^ [1-9] \\ d {0,2}(。\\ d {3})*(,\\ d +)?$對我不起作用,根據此處的類似線程
您應該嘗試以下表達式:
^\d{1,3}|\d(([ ,]?\d{3})*([.,]\d{2}+)?$)
用這種表達涵蓋了所提出的方案。
這里是完整的示例:
public class Decimal {
private static String REGEX = "^\\d{1,3}|\\d(([ ,]?\\d{3})*([.,]\\d{2}+)?$)";
public static void main(String[] args) {
String data[] = {"1000", "1,000", "1,000.00", "1000.00", "1000.00.00", "1,0.00", "1,000,00.00", "1,000,000.12"};
Pattern.compile(REGEX);
for (int i = 0; i < data.length; i++) {
if (data[i].matches(REGEX)) {
System.out.println(data[i] + " - valid");
} else {
System.out.println(data[i] + " - invalid");
}
}
}
}
輸出:
這將與您那里的數字匹配(?:\\d+(?:,\\d{3})*(?:\\.\\d{2})?|\\.\\d{2})
它也將匹配.00
以防萬一。 如果您不想要,只需刪除
|\\.\\d{2}
部分。
根據需要添加自己的邊界構造^$
或\\b
擴展
(?:
\d+
(?: , \d{3} )*
(?: \. \d{2} )?
| \. \d{2}
)
我的建議是:
^[1-9]((\d{0,2}(,\d{3})*(\.(\d{3},)*\d{1,3})?)|(\d*(\.\d+)?))$
一個數字或者每3個數字有一個分隔符,或者沒有(沒有中間形式)。 它要么有一個小數點,后至少一個數字,否則沒有。 在所有情況下,它都以非零數字開頭。
請記住,點(句點, .
)在正則表達式中具有特殊含義,因此需要轉義以獲取字面意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.