2011-12-21 21 views
0

需要在數字中呈現的位數是預定義的,我需要一個正則表達式/函數來驗證輸入數字。需要幫助驗證具有特定長度的十進制數使用javascript

示例:如果長度爲(0,2),則數應該允許像:

0.0  --true, 
0  -- true, 
000.0000 - true, 
0.2  --true, 
0.200 --true, 
1.2  -- false, 
0.22  -- true, 
0.02  -- true, 
.2  -- true, 
.99  -- true 

如果長度爲(2,2),則數應該允許像:

0.0  --true, 
0  -- true, 
000.0000 - true, 
0.2  --true, 
0.200 --true, 
1.2  -- true, 
0.22  -- true, 
0.02  -- true, 
.2  -- true, 
.99  -- true, 
12.21 -- true, 
0099.3200-- true, 
80.080 --true, 
80.80 --true, 
8.088 --false, 
09.9  --true, 
9.0  --true, 
5  --true, 
89  --true 

等等。任何想法/建議/代碼/幫助將不勝感激。

謝謝。

+1

我不明白失敗狀態,請提供更多失敗的例子,並解釋推理。 – zzzzBov 2011-12-21 18:12:14

+0

1>如果長度是(0,2) - 這裏的值應該允許類似的 - 在小數點前將只有0和小數點後的值的長度將是2(最大不包括右邊的0) – Bidesi 2011-12-21 18:20:04

+0

2>如果長度是(2 ,2),那麼decima前的數字位數將爲2,不包括左邊的0,後面的十進制位數將爲2,不包括右邊的0的-ie:0022.2200有效,但220.003是無效的 – Bidesi 2011-12-21 18:22:35

回答

0

的一個可能的方法概括:

  1. 驗證數據,以確保您使用的數字,或僅由數字和字符串時期的工作。
  2. 將該變量作爲字符串投射(x +''將將x投射爲字符串)
  3. 在句點中拆分字符串。 (var array = x.split('。');
  4. 確認分割數組長度不大於2(如果它大於2,則字符串中存在多於一個)
  5. 一半作爲數字(x * 1會將x作爲數字)
  6. 驗證每個半數小於(該半數的10 ^#位數)
  7. 如果4或6中的測試失敗,則數字失敗。但是,它通過。
+0

並注意數量足夠大或小到需要指數符號! – Pointy 2011-12-21 18:28:36

+0

此外,由於轉換爲字符串將隱含地表示沒有超過前導或尾隨零的數字,這可能就是你必須做的所有事情。 – Pointy 2011-12-21 18:29:24

+0

任何想法從小數部分刪除尾隨0? – Bidesi 2011-12-21 18:32:07

0

我通常會避免像這樣的RegExp,但類似以下的模式可以工作,其中ab來自(a, b)

/^0*[0-9]{0,a}(?:\.[0-9]{0,b}0*)?$/ 

細目:

^ - beginning of string 
0* - zero or more zeros 
[0-9]{0,a} - 0 to a digits* 
(?: - start of a non-capturing container 
\. - a period character 
[0-9]{0,b} - 0 to b digits* 
0* - zero or more zeros 
)? - 0 or 1 of the non-capturing containers 
$ - end of the string 

*(\d可以代替[0-9]使用,但我想保持字母作爲變量)

你如果需要動態數字,需要從字符串構建RegEx,但如果它們是靜態的,則可以對其進行硬編碼:

(2,2) 
/^0*[0-9]{0,2}(?:\.[0-9]{0,2}0*)?$/ 
+0

這是我真正想要的..謝謝zzzzBov – Bidesi 2011-12-21 18:57:35

+0

相撲,你應該把它標爲最好的。 – jeremiahs 2011-12-22 18:11:33

+0

請注意,如果您正在轉換數字,例如'072',請小心,因爲由於前導'0',它們將被解釋爲八進制。 – zzzzBov 2011-12-22 18:19:05