2017-01-16 56 views
3

我需要使用下面的模式驗證整數。整數部分最多可以有5個字符,分數值最多可以有2個字符。 (分數值是可選的)。 Leading +或 - 也是可選的。用於驗證小數的正則表達式

(+/-) mmmmm (5).nn (2) 

測試數據

Valid 
-1 
+1 
1 
+.1 
-.1 
.1 
+11111.11 
-11111.11 
11111 

Invalid 
+111111.11 
-111111.11 
+11111.111 
-11111.111 
11111.111 
111111.11 
+1. 
-1. 
1. 

這是我目前使用

[+-]?\d{0,5}\.?\d{1,2}? 

這是正確的?我錯過了明顯的東西嗎?

這裏是test case

EDIT

如果有一個附加的約束爲具有包含在精度的從標尺的位數。

例如DECIMAL(5,2)定義了表格1234.5的數字,而DECIMAL(5,5)定義了格式爲1.2345的數字。我應該如何改變這一點?

回答

3

務必:

^[+-]?(?:[0-9]{1,5})?(?:\.[0-9]{1,2})?$ 
  • ^[+-]?比賽+-啓動時,可選
  • (?:[0-9]{1,5})?一個五位數字,可選
  • (?:\.[0-9]{1,2})?$字面點,後面跟着一個或兩個數字的相符程度最後,可選。正如字面.與數字圖案下列非捕獲的組內時,它只會被當需要有數字事後

Demo

2

在Javascript中匹配,可以驗證使用

的數
Number(n) === Number(n) 

對於n任何非數的值,比如 「ABC」 或[1, 2, 3]Number(n)將返回爲NaN。鑑於NaN !== NaN在任何情況下,你可以很容易地告訴如果n是一個數字。

Number構造正常工作與幾乎任何形式的數字表示:

Number(123) // -> 123 
Number('123') // -> 123 
Number('+12e+3') // -> 12000 
Number('-1.2e-3') // -> -0.0012 
Number('--123') // -> NaN 

不過,如果你被限制使用正則表達式,它非常接近你所描述的:

  1. 可選「 +「或」 - 「。
  2. 0至5位數字。
  3. 可選「。」然後以小數部分爲1到2位數字。整個部分是可選的,這意味着一個沒有數字的點是無效的

而且沒有指數形式。

這將是

/^[+-]?\d{0,5}(\.\d{1,2})?$/ 

使

/^[+-]?\d{0,5}(\.\d{1,2})?$/.test(123) // -> true 
/^[+-]?\d{0,5}(\.\d{1,2})?$/.test('123') // -> true 
/^[+-]?\d{0,5}(\.\d{1,2})?$/.test('+123.45') // -> true 
/^[+-]?\d{0,5}(\.\d{1,2})?$/.test('--123') // -> false 
/^[+-]?\d{0,5}(\.\d{1,2})?$/.test('-123.456') // -> false 

請注意,部分(\.\d{1,2})?是整個可選。在你的情況下,點或兩位十進制數字是可選的,所以「123」。將是一個有效的數字。在Javascript中,它是有效的,所以不應該有任何問題。

1

在你的正則表達式的輕微改裝工程:

^[+-]?[0-9]{0,5}?(\.[0-9]{1,2})?$

^[+-]?\d{0,5}?(\.\d{1,2})?$

Demo1

Demo2