2015-11-18 41 views
1

我有正則表達式,應檢查是否字符串是十進制數...REGEXT幫助小數

^([\+\-])?\d{1,10}[\.,]?\d{1,10}?$ 
  1. 開始單+或 - // 不是強制性
  2. 遵循位數
  3. 遵循小數單個分離// 不是強制性
  4. ,並按照一到十位數// 不是強制性 - 這應該是隻需要按照小數點分隔

的情況下,但不是在

-1 //single digit 

的情況下工作,如果有超過10 digits w/o decimal separator -> should fail

assertEquals(false, Util.isDecimalNumber("12345678901")); 

有沒有更簡單的方法來檢查字符串是否是十進制數字?

+1

你受限於正則表達式?幾乎所有的編程語言都提供了一個爲你做這個的功能。 – flowit

+0

問題在於您的RegExp。你需要使用'{0'量詞而不是'?':**'^([\ + \ - ])?\ d {1,10} [\。,]?\ d {0,10} $'** –

+0

是'數123456.789123456'有效? – hjpotter92

回答

0

請嘗試以下方式:

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

小數, 在一些國家昏迷 是小數點分隔符和其他點。 沒有成千上萬的分隔符;) –

+0

@ J.Doe因此,如果輸入有小數點分隔符;它可以超過10位數的限制? – hjpotter92

+0

^[ - +]?\ d {1,10}(?:[\。,] [1-9] \ d {0,9})?$ thx for hint--它似乎沒問題。 –

1

你在你的正則表達式的小數部分的不正確的語法。

代替

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

它應該是

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

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

第一種是更合適的,因爲它不允許沒有小數部分像123.小數點。

在的話,它將成爲:

  1. 開始單+或 - //不是強制性的。

  2. 遵循數字

  3. 遵循小數單個分離遵循與一到十的數字//不是強制性

檢查this Regex101 demo出來。

+0

https://regex101.com/ –

+0

@ J.Doe https://regex101.com/r/tD3kP8/1 :) –