在某些项目中,我需要验证一些数据并尽可能确定它是可以在数学运算中使用的javascript数值.
jQuery和其他一些javascript库已经包含了这样一个函数,通常称为isNumeric.stackoverflow上还有一篇文章被广泛接受为答案,与前面提到的库所使用的一般例程相同.
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
作为我的第一篇文章,我无法在该帖子中回复.我接受的帖子的问题是,似乎有一些角落案例影响了我正在做的一些工作,所以我做了一些改变,试图解决我遇到的问题.
首先,如果参数是长度为1的数组,则上面的代码将返回true,并且该单个元素是上述逻辑认为是数字的类型.在我看来,如果它是一个数组,那么它不是数字.
为了缓解这个问题,我添加了一个检查来从逻辑中对数组进行折扣
function isNumber(n) {
return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n);
}
Run Code Online (Sandbox Code Playgroud)
当然,您也可以使用Array.isArray而不是Object.prototype.toString.call(n) !== '[object Array]'
编辑:我已经更改了代码以反映数组的通用测试,或者您可以使用jquery $.isArray或原型Object.isArray
我的第二个问题是负十六进制整数文字字符串("-0xA" - > -10)没有被计为数字.但是,正十六进制整数文字字符串("0xA" - > 10)被视为数字.我需要两个都是有效的数字.
然后我修改了逻辑以考虑到这一点.
function isNumber(n) {
return Object.prototype.toString.call(n) !== '[object Array]' &&!isNaN(parseFloat(n)) && isFinite(n.toString().replace(/^-/, ''));
}
Run Code Online (Sandbox Code Playgroud)
如果你每次调用函数时都担心正则表达式的创建,那么你可以在一个闭包中重写它,就像这样
isNumber = (function () {
var rx = /^-/;
return function (n) {
return Object.prototype.toString.call(n) !== '[object …Run Code Online (Sandbox Code Playgroud) 我需要在javascript中测试字符串中的"[any number]".我怎么配它呢?
哦,"["和"]"也需要匹配.
所以像"[1]"或"[12345]"这样的字符串是匹配的.
不匹配:"[23432"或"1]"
例如:
$('.form .section .parent').find('input.text').each(function(index){
$(this).attr("name", $(this).attr("name").replace("[current]", "['"+index+"']"));
});
Run Code Online (Sandbox Code Playgroud)
我需要将输入字段名称替换为:"items [0] .firstname"改为"items [1] .firstname"谢谢
我试图让我的登录表单只验证是否只输入了数字.如果输入只是数字,我可以工作,但是当我在数字后键入任何字符时,它仍然会验证等.12akf将起作用.凌晨1点就行了.我怎么能超越这个?
部分登录
<form name="myForm">
<label for="firstname">Age: </label>
<input name="num" type="text" id="username" size="1">
<input type="submit" value="Login" onclick="return validateForm()">
function validateForm()
{
var z = document.forms["myForm"]["num"].value;
if(!z.match(/^\d+/))
{
alert("Please only enter numeric characters only for your Age! (Allowed input:0-9)")
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题 - 我想检查一个字段,看它是否为整数,如果它不是空白的话.我没有使用任何额外的插件,只是jQuery.我的代码如下:
if($('#Field').val() != "")
{
if($('#Field').val().match('^(0|[1-9][0-9]*)$'))
{
errors+= "Field must be numeric.<br/>";
success = false;
}
}
Run Code Online (Sandbox Code Playgroud)
......它似乎不起作用.我哪里错了?
我收到的错误是val() is not an object.
更新:事实证明,真正的问题是我设置了元素名称而不是Id.
目前我正在使用此reg exp:
var valid = (value.match(/^\d+$/));
Run Code Online (Sandbox Code Playgroud)
但对于像"0.40"或"2.43"这样的数字,这不起作用.如何更改上面的reg exp以匹配浮点数?
我有一个应该作为数组执行的字符串:
var q = "The, 1, 2, Fox, Jumped, 3, Over, 4";
var z = q.split(',');
Run Code Online (Sandbox Code Playgroud)
如果我使用split(),它将创建一个字符串数组:
[‘The’, '1', '2', ‘Fox’, ‘Jumped’, '3', ‘Over’, '4']
Run Code Online (Sandbox Code Playgroud)
我不需要那个.我需要一个像这样的数组:
[‘The’, 1, 2, ‘Fox’, ‘Jumped’, 3, ‘Over’, 4]
Run Code Online (Sandbox Code Playgroud)
指示哪个是字符串,哪个是数字.
我的代码是:
function isNumber(n){
return typeof n == 'number' && !isNaN(n);
}
window.onload=function(){
var a=0,b=1,c=2.2,d=-3,e=-4.4,f=10/3;
var shouldBeTrue=[a,b,c,d,e,f];
var aa="0",bb="1",cc="2.2",dd="-3",ee="-4.4",ff="10/3";
var shouldBeFalse=[aa,bb,cc,dd,ee,ff];
var aaa,bbb=true,ccc=false,ddd=document.getElementsByTagName('html');
var alsoTheseBeFalse=[aaa,bbb,ccc,ddd,""," ",,null,NaN];
for(var i=0;i<shouldBeTrue.length;i++)
if(isNumber(shouldBeTrue[i]) != true) alert("x");
for(i=0;i<shouldBeFalse.length;i++)
if(isNumber(shouldBeFalse[i]) != false) alert("x");
for(i=0;i<alsoTheseBeFalse.length;i++)
if(isNumber(alsoTheseBeFalse[i]) != false) alert("x");
}
Run Code Online (Sandbox Code Playgroud)
我应该检查什么以确保我的功能在所有方面都是101%完美?(另外,如果你知道更好的功能请告诉我)
在PHP中,它非常简单:
is_numeric(23);//true
is_numeric("23");//true
is_numeric(23.5);//true
is_numeric(true);//false
Run Code Online (Sandbox Code Playgroud)
但是我如何在Javascript中执行此操作?我可以使用正则表达式,但是有一个函数吗?
好像AngularJS似乎angular.isNumber不起作用.它不适用于数字字符串.难道我做错了什么?我应该用isNaN()吗?
angular.isNumber('95.55') == false
angular.isNumber('95.55' * 1) == true
angular.isNumber('bla' * 1) == true
angular.isNumber(NaN) == true
Run Code Online (Sandbox Code Playgroud)
我需要一些东西来看看一个字符串是否是一个数字(当它实际上是)并且angular.isNumber()不会让我这样做,除非我乘以1,但如果我这样做那么它将永远是真的.另外NaN是不是一个数字(定义)等应该返回false.
我想只在值是数字时才显示元素.这该怎么做?我试过了 :
ng-show='angular.isNumber(10)'ng-show='isNumber(10)'