目前我正在使用此reg exp:
var valid = (value.match(/^\d+$/));
但对于像“0.40”或“2.43”这样的数字,这不起作用。如何更改上面的reg exp以匹配浮点数?
答案 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;
}