2013-07-23 29 views
1

驗證字符串的最佳方法和解決方案是什麼?必須用點或逗號和最多兩個十進制值表示價格值?Java用逗號或點和兩個十進制值驗證價格

RegExpjava.text.DecimalFormat還是別的?

這些值被接受:

1 
11 

1,05 
2,5 

1.05 
2.5 

我看到這些解決方案,但這些都不是正是我想要的:

java decimal String format

valdating a 'price' in a jtextfield

我也試試這個正則表達式/^(\\d+(?:[\\.\\,]\\d{2})?)$/但它不起作用。

+0

我的建議是去正規表達式,尤其是在特定的格式,你希望 –

+0

正則表達式幫你。 – Deckard27

+0

^[0-9] +(\。[0-9] +)?$ 與此它必須工作(添加逗號的聯繫 – Deckard27

回答

12

使用正則表達式:逗號或句號,其次是1位或2位:

final String regExp = "[0-9]+([,.][0-9]{1,2})?"; 

這1個或多個數字,其次是可選的匹配。

在Java中,你可以使用:

  • String.matches(String regex)簡單地驗證String。例如:"1.05".matches(regExp)返回true

  • Pattern and Matcher,這將是fastermore經常使用你的正則表達式。例如:

    final Pattern pattern = Pattern.compile(regExp); 
    
    // This can be repeated in a loop with different inputs: 
    Matcher matcher = pattern.matcher(input); 
    matcher.matches(); 
    

Test.

+3

這整個正則表達式沒有意義 – HamZa

+0

這是 – Deckard27

+1

讓我澄清一下,OP要求將* decimal *數字限制爲2,而這個數字與無限的十進制數字相匹配,並且您使用的是字符類,所以你不需要使用那個醜陋的'|',否則你也會匹配一個管道,試試'12 | 1212'它會匹配,而不是真正的OP想要什麼。 – HamZa

0

你可以嘗試像一些事情該

String str="1,05"; 
    String[] dotSub=str.split("\\.|,"); 
    if(dotSub.length==2){ 
     if(dotSub[1].length()<=2){ 
      System.out.println("valid price"); 
     } 
     else{ 
      System.out.println("not a valid price"); 
     } 
    } 
    else{ 
     System.out.println("not a valid price"); 
    } 
}