проверка, является ли значение текстового поля целочисленным в JavaScript - PullRequest
7 голосов
/ 28 декабря 2010

Как я могу проверить, является ли текст, введенный в текстовое поле, целым числом или нет?Я использовал функцию NAN, но она также принимает и десятичные значения.

Как я могу это сделать?Есть ли встроенный метод?

Ответы [ 7 ]

16 голосов
/ 28 декабря 2010

Скажем, на текстовое поле ссылается переменная 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
}
1 голос
/ 26 февраля 2013
// 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;
}
1 голос
/ 28 декабря 2010

Регулярные выражения были бы способом:

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 из .trim () в JavaScript, не работающем в 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);
}
0 голосов
/ 10 октября 2015

Лучше всего использовать регулярное выражение следующим образом:

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
0 голосов
/ 28 января 2011

Если вы ищете целое или десятичное число, вы можете перейти к:

function IsNumeric(input)
{
   return (input - 0) == input && input.length > 0;
}
0 голосов
/ 28 декабря 2010

Данные формы всегда текстовые.Я предлагаю, чтобы вы проанализировали его как целое число и сравнили его с оригиналом:

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

Научная запись не поддерживается, также как и тысячи разделителей.Если это проблема, вам нужно что-то другое;)

Обновление: Я хочу пояснить, что это только один из возможных подходов, а не единственная Истина.Этот подход имеет смысл, если вам нужно выполнить математические расчеты с данными, поэтому вы все равно должны получить числовую переменную.

0 голосов
/ 28 декабря 2010
var num = document.getElementById("myField").value;
if(/^\d+$/.test(num)) {
    // is an int
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...