JavaScript:正则表达式包含带有可选前导减号的小数和小数部分的数字?

时间:2017-03-30 12:47:05

标签: javascript regex validation

我试图运行以下正则表达式:

(-?\d+\.?(\d*)?)

当我在https://regex101.com/r/lD2qB4/5

上试用时效果非常好

但是当我将它应用于我的JavaScript代码时,它并不接受前导减号!

这可能是什么原因?

输入'应该'匹配:

  • 123.456
  • 123456
  • -123.456

输入不应该'匹配:

  • 123.456。
  • 123456 ..
  • - 123.456

修改

代码段:

private validateNumber() {
        let newValue: string = $(this.getNativeElement()).val();
        if (/(-?\d+\.?(\d*)?)/.test(newValue)) {
            let min = (this.options.min) ? this.options.min : this.numberTypesRenges.get(this.options.numberType).min;
            let max = (this.options.max) ? this.options.max : this.numberTypesRenges.get(this.options.numberType).max;
            if (+newValue >= min && +newValue <= max) {
                this.prevValue = newValue;
            } else {
                this.ngModel.reset(this.prevValue);
            }
        } else {
            this.ngModel.reset(this.prevValue);
        }
    }

1 个答案:

答案 0 :(得分:0)

只有一个问题

/^(-?\d+(\.\d+)?$/
^^^           ^^

开始和结束。否则它将进行部分匹配。

此外,您可以将可选.\d组合在一起

AS (\.\d+)而不是`。?\ d *?

请注意,*表示0 or more,因此,它将与1.匹配。

而是将+用于1 or more