2015-11-18 38 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 :) –