簡體   English   中英

Java正則表達式檢查字符串是否為有效的數字格式(逗號和小數點放置)

[英]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");
            }
        }
    }

}

輸出:

  • 1000-有效
  • 1,000-有效
  • 1,000.00-有效
  • 1000.00-有效
  • 1000.00.00-無效
  • 1,0.00-無效
  • 1,000,00.00-無效
  • 1,000,000.12-有效

這是您正在尋找的可能正則表達式之一:

^\d{1,3}([ ,]?\d{3})*([.,]\d+)?$

演示: https : //regex101.com/r/T8tcDP/1

這將與您那里的數字匹配(?:\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM