【发布时间】:2010-12-28 06:38:11
【问题描述】:
如何检查文本框中输入的文本是否为整数?我使用了 NAN 函数,但它也接受十进制值。
我该怎么做?有没有内置方法?
【问题讨论】:
-
只是注意到 Number.isInteger 是在 ECMA-262 ed 6 aka ECMAScript 2015 中添加的。
标签: javascript validation
如何检查文本框中输入的文本是否为整数?我使用了 NAN 函数,但它也接受十进制值。
我该怎么做?有没有内置方法?
【问题讨论】:
标签: javascript validation
假设文本字段被变量intfield引用,那么你可以这样检查:
var value = Number(intfield.value);
if (Math.floor(value) == value) {
// value is an integer, do something based on that
} else {
// value is not an integer, show some validation error
}
【讨论】:
Number("") 返回 0,Math.floor(value) == value 返回 true。如果 value 保留为空字符串,它也会返回 true。
正则表达式是一种方式:
var re = /^-?\d\d*$/
alert(re.test(strNumber)); // leading or trailing spaces are also invalid here
带有更新的完整示例:
http://rgagnon.com/jsdetails/js-0063.html
function validateInteger( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
valid integer number.
PARAMETERS:
strValue - String to be tested for validity
RETURNS:
True if valid, otherwise false.
**************************************************/
var objRegExp = /(^-?\d\d*$)/;
//check for integer characters
return objRegExp.test(strValue);
}
已更新以处理空格 - 这可能在验证中是不允许的,但无论如何都是这样: 可以继续使用我提供的链接中的代码(leftTrim/rightTrim),但在这里我重用了来自.trim() in JavaScript not working in IE的修剪
function ignoreLeadingAndtrailingWhitespace( strValue ) {
return strValue.length>0?validateInteger( strValue.trim() ):false;
}
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
}
function validateInteger( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
valid integer number.
PARAMETERS:
strValue - String to be tested for validity
RETURNS:
True if valid, otherwise false.
**************************************************/
var objRegExp = /(^-?\d\d*$)/;
//check for integer characters
return objRegExp.test(strValue);
}
【讨论】:
test,但仍然很奇怪。另外,它不考虑开头或结尾的空格。
// validate if the input is numeric and between min and max digits
function validateNumberSize(inputtxt, min, max)
{
var numbers = /^[0-9]+$/;
if(inputtxt.match(numbers))
{
if(inputtxt.length >= min && inputtxt.length <= max)
{
return true;
}
}
return false;
}
【讨论】:
var num = document.getElementById("myField").value;
if(/^\d+$/.test(num)) {
// is an int
}
【讨论】:
表单数据始终是文本。我的建议是您将其解析为整数并将其与原始数据进行比较:
var sampleData = ["not a number", "0", "10", "3.14", "-12", "-0.34", "2e10", "34foo", "foo34"];
var integers = [], notIntegers = [];
for(var i=0, len=sampleData.length; i<len; i++){
var original = sampleData[i];
var parsed = parseInt(original, 10);
if( !isNaN(parsed) && original==parsed ){
integers.push(parsed);
}else{
notIntegers.push(original);
}
}
alert("Integers: " + integers.join(", ") + "\nNot integers: " + notIntegers.join(", "));
这表明:
Integers: 0, 10, -12
Not integers: not a number, 3.14, -0.34, 2e10, 34foo, foo34
不支持科学记数法,也不支持千位分隔符。如果这是一个问题,你需要一些不同的东西;)
更新:我想明确指出,这只是可能的方法之一,而不是唯一的真理。如果您需要对数据进行数学运算,那么这种方法是有意义的,因此无论如何您都必须获得一个数值变量。
【讨论】:
如果您正在寻找整数或小数,您可以选择:
function IsNumeric(input)
{
return (input - 0) == input && input.length > 0;
}
【讨论】:
... && input.trim().length > 0
最好使用正则表达式如下:
function isInteger(str) {
var r = /^-?[0-9]*[1-9][0-9]*$/;
return r.test(str);
}
只是一个测试演示:
> function isInteger(str) {
... var r = /^-?[0-9]*[1-9][0-9]*$/;
... return r.test(str);
... }
> isInteger("-123")
true
> isInteger("a123")
false
> isInteger("123.4")
false
【讨论】: