目前我正在使用这个正则表达式:
var valid = (value.match(/^\d+$/));
但是对于像'0.40'或'2.43'这样的数字,这并不起作用。我该如何修改上面的正则表达式以匹配浮点数?
目前我正在使用这个正则表达式:
var valid = (value.match(/^\d+$/));
但是对于像'0.40'或'2.43'这样的数字,这并不起作用。我该如何修改上面的正则表达式以匹配浮点数?
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
胜利:
var valid = !/^\s*$/.test(value) && !isNaN(value);
呕。
var valid = (value.match(/^-?\d*(\.\d+)?$/));
String
(我还必须考虑指数符号等),也可以是Number
对象,基本上是任何我无法做出任何类型假设的东西。isNaN
对我的情况不够用:// string values
!isNaN(' ') == true;
!isNaN('\t\t') == true;
!isNaN('') == true;
// boolean values
!isNaN(true) == true;
!isNaN(false) == true;
// etc..
最终我编写了一组30+ 单元测试,你可以在这里找到并运行,下面的函数是通过了我所有测试的函数:
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
jQuery.isNumeric
也通过了你的所有测试。 - ivan.a.bovinvar 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('-');
1E-6
(0.000001)或 1E6
(1000000)。 - Wilt3.
。为了匹配这种情况,我使用了以下正则表达式:/^[+-]?((\.\d+)|(\d+(\.\d+)?)|(\d+\.))$/
。 - nemo/^-?\d+(\.?\d+)?$/.test(text)
var valid = (value.match(/^[\d.]+$/));
这里是没有使用任何正则表达式的验证,使用了元素本身的“validity”属性:
var valid = input_element.validity.valid;
((?:\d+\.\d*)|(?:\d*\.?\d+))
接受1、1.0、1.、0.1、.1,但不接受“.”或带有多个“.”的任何内容。
请参见regex101上的示例:https://regex101.com/r/t7eikU/1
var valid = value.match(/\d+?\.\d+/);
这是我使用的
/[\+]?([\-]?([0-9]{1,})?[\.]?[0-9]{1,})/
.42
或37.
这样的数字。 - James Cronen