我需要制作一个满足以下要求的输入掩码:
- 1255454-好
- 1.54546-可以
- 10056-好
- 0.6565-可以
- 00056-好
- 056565-不正常
- ds5asd-不正常
- .05 65656-不正常
到目前为止,我已经找到了这个解决方案:
/^-?d*[.,]?d*$/.test(value)
但它不包括这些情况:
.0565656
056565
0.0000005
应该这样工作:
/^(0[.,]{1}|[1-9]{1})d*[.,]?d*$/.test(value);
对于四处玩耍,我强烈推荐Regex101。以下是您在Regex101上的正则表达式和测试用例https://regex101.com/r/Mmf671/2/
编辑:如果你也想允许空字符串,那么使用这个:
/(^$|^(0[.,]{1}|[1-9]{1})d*[.,]?d*$)/.test(value);
^^
// Note the marked difference in order to allow for empty strings
使用:^-?(?!0d)d+(?:[.,]d+)?$
(?!0d)
是一个负前瞻,它确保我们在0
开头没有跟一个数字。
var test = [
'1255454',
'1.54546',
'1,0056',
'0.6565',
'0,0056',
'-123',
'-0.123',
'-05',
'056565',
'ds5asd',
'.0565656',
];
console.log(test.map(function (a) {
return a+' : '+/^-?(?!0d)d+(?:[.,]d+)?$/.test(a);
}));
演示&解释