正则表达式验证小数

时间:2017-01-16 09:29:09

标签: javascript regex

我需要使用以下模式验证整数。整数部分最多可包含5个字符,分数值最多可包含2个字符。 (分数值是可选的)。前导+或 - 也是可选的。

(+/-) 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

修改

如果存在额外约束,则精度中包含刻度的位数。

例如,DECIMAL(5,2)定义了1234.5形式的数字,而DECIMAL(5,5)定义了形式1.2345的数字。我应该怎么改变这个?

3 个答案:

答案 0 :(得分:3)

执行:

^[+-]?(?:[0-9]{1,5})?(?:\.[0-9]{1,2})?$
  • ^[+-]?在开始时匹配+-,可选
  • (?:[0-9]{1,5})?匹配一到五位数,可选
  • (?:\.[0-9]{1,2})?$匹配一个文字点,后面跟一个或两个数字,可选。由于文字.位于未捕获的组中,并且后面有数字模式,因此只有在之后需要数字时才匹配

Demo

答案 1 :(得分:2)

在Javascript中,您可以使用

验证号码
Number(n) === Number(n)

对于n的任何非数字值,例如“abc”或[1, 2, 3]Number(n)将返回NaN。鉴于NaN !== NaN在任何情况下,您都可以轻松判断n是否为数字。

数字构造函数适用于几乎任何形式的数字表示:

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位数。整个部分是可选的,这意味着没有数字的单个点无效
  4. 没有指数形式。

    那将是

    /^[+-]?\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中,它是有效的,所以不应该有任何问题。

答案 2 :(得分:1)

正则表达式稍作修改:

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

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

Demo1

Demo2