如何在javascript中验证数字(包括浮点数)

时间:2009-12-02 03:46:06

标签: javascript regex

目前我正在使用此reg exp:

var valid = (value.match(/^\d+$/));

但对于像“0.40”或“2.43”这样的数字,这不起作用。如何更改上面的reg exp以匹配浮点数?

10 个答案:

答案 0 :(得分:51)

你不需要正则表达式! isNaN会将您的值转换为Number

var valid = !isNaN(value);

例如:

!isNaN('0'); // true
!isNaN('34.56'); // true
!isNaN('.34'); // true
!isNaN('-34'); // true
!isNaN('foo'); // false
!isNaN('08'); // true

不情愿编辑(感谢CMS):

抨击类型强制,!isNaN('')!isNaN(' ')!isNaN('\n\t')等都是true

空白测试+ isNaN FTW:

var valid = !/^\s*$/.test(value) && !isNaN(value);

呸。

答案 1 :(得分:26)

继续@Crescent Fresh方法,前一段时间,我不得不进行数字验证,但我需要验证变量是否包含数字而不知道其类型,它可能是String包含在这种情况下的数值,(我还必须考虑指数表示法等),Number对象,基本上我无法做出任何类型假设。

我必须注意隐式类型转换,例如,当我指向@Crescent时,isNaN对我的情况来说还不够:

// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;

// boolean values
!isNaN(true) == true;
!isNaN(false) == true;

// etc..

我最终编写了一组 30 + 单元测试,您可以找到并运行here,并且以下函数是通过的函数我所有的测试:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

答案 2 :(得分:24)

var valid = (value.match(/^-?\d*(\.\d+)?$/));

答案 3 :(得分:5)

这是我的RegExp版本。

var n = /^[+-]?((\.\d+)|(\d+(\.\d+)?))$/;

<强>匹配

n.test('3');
n.test('3.0');
n.test('0.3');
n.test('.3');
n.test('+3');
n.test('+3.0');
n.test('+0.3');
n.test('+.3');
n.test('-3');
n.test('-3.0');
n.test('-0.3');
n.test('-.3');

不匹配

n.test('');
n.test('+');
n.test('-');

答案 4 :(得分:1)

这就是我使用的

/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/

答案 5 :(得分:0)

var valid = (value.match(/^[\d.]+$/));

答案 6 :(得分:0)

var valid = value.match(/\d+?\.\d+/);

答案 7 :(得分:0)

您可以尝试我的解决方案:/^-?\d+(\.?\d+)?$/.test(text)

答案 8 :(得分:0)

这是一个正则表达式,它接受并捕获所有且仅有效的非负浮点数(但它不处理指数):

((?:\d+\.\d*)|(?:\d*\.?\d+))

接受1、1.0、1、0.1,.1,但不接受“。”也不包含一个以上的“。”

请参见regex101上的示例:https://regex101.com/r/t7eikU/1

答案 9 :(得分:-1)

这里是使用元素本身的“ validity”属性进行的不带任何正则表达式的验证:

public int reverseNumber(int n) {
  // step one: we find the factors using integer maths
  int s = n;
  int thousands = s / 1000; // this will be 0 if the number is <1000
  s = s - thousands*1000;
  int hundreds = s / 100;   // this will be 0 if the number is <100
  s = s - hundreds*100;
  int tens = s / 10;        // etc.
  s = s - tens*10;
  int ones = s;

  // then: let's start reversing. single digit?
  if (n<10) return n;

  // two digits?
  if (n<100) {
    return ones*10 + tens;
  }

  // etc.
  if (n<1000) {
    return ones*100 + tens*10 + hundreds;
  }

  if (n<10000) {
    return ones*1000 + tens*100 + hundreds*10 + thousands;
  }

  // if we get here, we have no idea what to do with this number.
  return n;
}