2012-12-07 62 views
-1

可能重複:
Simple regular expression for a decimal with a precision of 2正則表達式表達驗證號碼

HI我需要使用正則表達式來驗證數字。主要思想是我有一個數字的整數部分,小數部分和小數點分隔符。例如,如果我有這樣的:

var integer_part = 4; 
var decimal_part = 2; 
var decimal_separator = "."; 

// will be valid numbers 
// 2546.33 
// 12 
// 1.33 
// 263 
// 0 

我可以做一個正則表達式字符串變量中的值來驗證字符串¿?

+1

試試這個 - '\ d +(。\ \ d +)' –

+0

類似的帖子 - http://stackoverflow.com/questions/308122/simple-regular-expression-for-a-decimal-with-a-precision-of-2 –

+1

你嘗試過什麼?有什麼問題?此外,作業的相關方式是什麼? –

回答

0

只要使用這個表達式,它會尋找任何與

\d+(\.\d+) 

然而,有可能是一個更好的方式來做到這一點。

Boolean isFloat=false; 
try 
{ 
    float num=parseFloat(n); 
    isFloat=!isNaN(num) && isFinite(num); 
} 
catch (NumberFormatException ex) 
{ 
    //Isn't a number 
} 
+1

輸入變量?你有沒有使用太多的Java? – Jivings

3

你並不需要爲這個正則表達式:

!isNaN(parseFloat(n)) && isFinite(n); 

,檢查一個數是浮點數,不楠是不是無窮大。

這聽起來像一個XY問題。你應該問的是How can I validate a number?,並留下了正則表達式的一部分。

1

雖然它不是從你的問題不清楚,我假設你想使用的變量來確定你的正則表達式允許值範圍內。如果是這樣,你可以讓你的模式字符串是這樣的:

pattern = '/[\d]{0,' + integer_part + '}(' + decimal_separator + '[\d]{1,' + decimal_part + '})?/'; 

這是一個基本的實現。在這種情況下,爲了使用.你分離器,你實際上要設置decimal_separator = '\.';這是逃跑的十進制這是在正則表達式通配符匹配。

如果你真的想尋找更多的邊緣的情況下,您可能希望有條件地建立你的模式是這樣的:

pattern = '/[\d]{0,' + integer_part + '}'; 
if (decimal_part > 0) { 
    if (decimal_separator == '.') { 
     pattern += '(\.'; 
    } else { 
     pattern += '(' + decimal_separator; 
    } 
    pattern += '[\d]'; 
    if (decimal_part == 1) { 
     pattern += '{1}'; 
    } else { 
     pattern += '{1,' + decimal_part + '}'; 
    } 
    pattern += ')?'; 
} 
pattern += '/'; 
+0

'.'在正則表達式中有特殊的處理,轉義它 – hoaz

+0

@hoaz我在我的更詳細的實現中做了。只是注意到我真的在我的筆記上鍵入,以便在更新時添加更詳細的實現時,在第一個字符串的情況下使用'\ .'作爲小數點分隔符。將它添加回來。 –

+0

好吧,這是我正在尋找的答案。謝謝 –