2012-06-19 69 views
0

我需要一个javascript功能,能够检查数字-只。javascript数字验证功能

例如:1,2,3,4,5,6,7,8,9,0将返回true 并且 - 也将返回true。

除此之外全部返回false包括回车被按下。

我有这样的功能:

function IsNumeric(sText){ 
    var filter = /^[0-9-+]+$/; 
    if (filter.test(sText)) { 
     return true; 
    }else { 
     return false; 
    } 
} 

我这样称呼它:

if(!IsNumeric(value)) { 
    alert("Number and - only please"); 
} 

由于某种原因,这是行不通的,任何方法来做验证不使用正则表达式?

+0

http://stackoverflow.com/questions/18082/validate-numbers-in-javascript-isnumeric –

+0

你的正则表达式是工作的罚款的可能的复制。你能指定一个它失败的测试用例吗?你的意思是123-211应该返回false? – Tamil

+0

该功能正常工作。但是我看到你正在考虑按键,就像你说的那样,输入会返回false。你可以添加你获得价值的部分吗? –

回答

2

编辑: OK,更新按您的评论,一个表达式匹配任何一个孤独的减号没有数字任意组合减号:

function IsNumeric(sText){ 
    return /^(-|\d+)$/.test(sText); 
} 

如果你只想要正数,并且不希望允许前导零,然后使用这个表达式:

/^(-|[1-9]\d*)$/ 

关于你的问题“任何方法来执行验证而不使用正则表达式吗?”,是的,有无数的方法可以通过JS提供的各种字符串和数字操作函数来实现。但是正则表达式最简单。

如果提供的值包含数字和正号或负号的任何组合,包括重复项(如"---+++123")中的重复项,则函数返回true。请注意,+接近你的正则表达式意味着匹配前面的字符1次或更多次。

你可能想要的是一个正则表达式,它允许在开始一个加号或减号,随后的数字任意组合:

function IsNumeric(sText){ 
    return /^[-+]?\d+$/.test(sText); 
} 

?指0或1次匹配前面的字符。您可以将[0-9]简化为\d。请注意,您不需要if语句:直接从.test()返回结果。

接受“-123”,“123”,“+123”但不接受“--123”。如果您不想在开始时允许加号,请将正则表达式更改为/^-?\d+$/

“例如:1,2,3,4,5,6,7,8,9,0将返回true,并且 - 也将返回true。“

你的例子似乎在说,只有一个数字或一个减号被认为是有效的 - 如果是这样那就试试这个:

function IsNumeric(sText){ 
    return /^[\d-]$/.test(sText); 
} 

+0

它需要是 - 只有 或 任何数字(111,231,1,35) – Redbox

+0

不能放负数 – Redbox

+0

好吧,我已在我的答案的开头部分进行更新,以允许使用单独的减号或任何组合数字。 – nnnnnn

0

可以很简单......试试这个:

function IsNumeric(str) { 
    return str.length == 1 && (parseInt(str) < 10 || str == "-"); 
} 
1

如何

function IsNumeric(s) { 
    return /^(+|-|)\d*$/.test(s); 
} 
1

Hiphen( - )具有特殊含义,所以在字符集中使用转义字符。

试试这个:

 var filter = /^[0-9\-]+$/;