2011-05-13 35 views
0

我想通過使用正則表達式來檢測String是否爲小數。我的問題是關於如何使用正則表達式機制,而不是檢測String是小數。我使用GWT提供的RegExp類。RegExp GWT/Javascript的測試方法

 String regexDecimal = "\\d+(?:\\.\\d+)?"; 
     RegExp regex = RegExp.compile(regexDecimal); 
     String[] decimals = { "one", "+2", "-2", ".4", "-.4", ".5", "2.5" }; 
     for (int i = 0; i < decimals.length; i++) { 
      System.out.println(decimals[i] + " " 
        + decimals[i].matches(regexDecimal) + " " 
        + regex.test(decimals[i]) + " " 
        + regex.exec(decimals[i])); 
     } 

輸出:

one false false null 
+2 false true 2 
-2 false true 2 
.4 false true 4 
-.4 false true 4 
.5 false true 5 
2.5 true true 2.5 

我期待這兩種方法String.matches()RegExp.test()返回相同的結果。

  1. 那麼 這兩種方法有什麼區別?
  2. 如何使用RegExp.test()獲得相同的行爲?
+0

這兩個答案都很好,並解決了我的問題,所以現在哪一個我接受,因爲他們基本上是相同的答案? – Sydney 2011-05-14 12:25:41

回答

1

嘗試將正則表達式改爲

"^\\d+(?:\\.\\d+)?$" 

解釋
雙逃逸是因爲我們在Java中...
正則表達式與^開始力量正則表達式,從匹配字符串的開始。
正則表達式以$結尾,以強制正則表達式匹配字符串的最末尾。

這是你應該怎麼弄String.matches()做相同的GWT RegExp.test()

1

我不知道其中的差別,但我要說的是,RegExp.test()是正確的,因爲你的正則表達式只要你的字符串中有一個數字就匹配,並且String.matches()的行爲就像在那裏錨定在正則表達式附近。

\\d+(?:\\.\\d+)? 

你的非捕獲組是可選的,所以一個\\d[0-9])足以匹配,不管是什麼左右。

當你給你的正則表達式添加錨時,這意味着它必須匹配從開始到結束的字符串,然後RegExp.test()可能會顯示相同的結果。

^\\d+(?:\\.\\d+)?$