js regexp浮点数,前导为零



我需要制作一个满足以下要求的输入掩码:

  1. 1255454-好
  2. 1.54546-可以
  3. 10056-好
  4. 0.6565-可以
  5. 00056-好
  6. 056565-不正常
  7. ds5asd-不正常
  8. .05 65656-不正常

到目前为止,我已经找到了这个解决方案:

/^-?d*[.,]?d*$/.test(value)

但它不包括这些情况:

  1. .0565656
  2. 056565
  3. 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);
}));

演示&解释

最新更新