我需要使用以下模式验证整数。整数部分最多可包含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的数字。我应该怎么改变这个?
答案 0 :(得分:3)
执行:
^[+-]?(?:[0-9]{1,5})?(?:\.[0-9]{1,2})?$
^[+-]?
在开始时匹配+
或-
,可选(?:[0-9]{1,5})?
匹配一到五位数,可选(?:\.[0-9]{1,2})?$
匹配一个文字点,后面跟一个或两个数字,可选。由于文字.
位于未捕获的组中,并且后面有数字模式,因此只有在之后需要数字时才匹配答案 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
但是,如果您被限制使用正则表达式,那么它与您所描述的非常接近:
没有指数形式。
那将是
/^[+-]?\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)