Проверьте, ли введенный число или буква JavaScript

Я использую формы в HTML и JavaScript. Я хотел бы, чтобы предупреждение открылось только если вводы данных пользователем БУКВА и щелчки submit.

Таким образом, у меня есть HTML-код:

<form name="myForm" action="" onsubmit="return checkInp()" method="post">
    First name: <input type="text" name="age">
<input type="submit" value="Submit">   

И код JavaScript:

function checkInp()
{
var x=document.forms["myForm"]["age"].value;
if (x consists of any letters) // this is the code I need to change
{
alert("Must input numbers");
return false;
}
}
62
задан 30 September 2016 в 12:14

11 ответов

Можно использовать функцию isNaN, чтобы определить, не преобразовывает ли значение в число. Пример как указано ниже:

function checkInp()
{
  var x=document.forms["myForm"]["age"].value;
  if (isNaN(x)) 
  {
    alert("Must input numbers");
    return false;
  }
}
103
ответ дан 31 October 2019 в 13:24

Вы могли использовать Функция isNaN. Это возвращает true, если данные не являются числом. Это было бы чем-то как этот:

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    if (isNaN(x)) // this is the code I need to change
    {
        alert("Must input numbers");
        return false;
    }
}

Примечание: isNan рассматривает 10.2 как верный номер.

11
ответ дан 31 October 2019 в 13:24

Используйте Регулярное выражение для соответствия только для букв. Также хорошо иметь знание о, если когда-нибудь необходимо делать, что-то более сложное, как удостоверяются, что это - определенное количество чисел.

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[a-zA-Z]+$/;
    if (!x.match(regex))
    {
        alert("Must input string");
        return false;
    }
}

Еще лучше должен был бы отклонить что-либо кроме чисел:

function checkInp()
{
    var x=document.forms["myForm"]["age"].value;
    var regex=/^[0-9]+$/;
    if (x.match(regex))
    {
        alert("Must input numbers");
        return false;
    }
}
29
ответ дан 31 October 2019 в 13:24

Просто найдите остаток путем деления на 1, который является x%1. Если остаток 0, это означает, что x является целым числом. Иначе необходимо отобразиться, сообщение "Должно ввести числа". Это будет работать даже в случае строк, десятичные числа и т.д.

function checkInp()
{
    var x = document.forms["myForm"]["age"].value;
    if ((x%1) != 0) 
    {
        alert("Must input numbers");
        return false;
    }
}
6
ответ дан 31 October 2019 в 13:24

можно использовать isNaN (). это возвращает true, когда данные не являются числом.

var data = 'hello there';
if(isNaN(data)){
  alert("it is not number");
}else {
  alert("its a valid number");
}
5
ответ дан 31 October 2019 в 13:24

Попробуйте это:

if(parseInt("0"+x, 10) > 0){/* x is integer */}
4
ответ дан 31 October 2019 в 13:24

Я знаю, что это сообщение старо, но это было первое, которое открылось, когда я сделал поиск. Я попробовал @Kim Kling RegExp, но он потерпел полный провал. Также до нахождения этого форума я попробовал почти все другие изменения, перечисленные здесь. В конце ни один из них не работал кроме этого, я создал; это хорошо работает, плюс он es6:

    let regex = new RegExp(/[^0-9]/, 'g');
    let x = document.forms["myForm"]["age"].value;

    if (x.match(regex)) {
       alert("Must be a valid number");
            return
    }
4
ответ дан 31 October 2019 в 13:24

Лучший (безошибочный) код был бы похож:

function isReallyNumber(data) {
    return typeof data === 'number' && !isNaN(data);
}

Это обработает пустые строки также. Другая причина, isNaN("12") равняется false, но "12" строка и не число, таким образом, она должна закончиться к true. Наконец, бонусная ссылка , который мог бы заинтересовать Вас.

3
ответ дан 31 October 2019 в 13:24

Я думаю, что самое легкое должно было бы создать Number объект со строкой и проверкой если с помощью isInteger функция, обеспеченная Number сам класс.

Number.isInteger(Number('1')) //true
Number.isInteger(Number('1 mango')) //false
Number.isInteger(Number(1)) //true
Number.isInteger(Number(1.9)) //false
2
ответ дан 31 October 2019 в 13:24

function isNumber(data){
    data = data +"e1";                      // Disallow eng. notation "10e2"+"e1" is NaN
    var clean = parseFloat(data,10) / data ; // 1 if parsed cleanly
    return ( data==0 || clean && (data/data) === 1.0);  // Checks for NaN
}

function isInteger(data){
    data = data +"e1";                      // Disallow eng. notation "10e2"+"e1" is NaN
    var clean = parseInt(data,10) / data ; // 1 if parsed cleanly
    return (data==0 ||clean && (data%1) === 0);          // Checks For integer and NaN
}

//Expected pass
console.log(isNumber("0"))
console.log(isNumber("-0.0"))
console.log(isNumber("+0.0"))
console.log(isNumber(0))
console.log(isNumber(-0.0))
console.log(isNumber(+0.0))
console.log(isNumber(1))
console.log(isNumber(-10.0))
console.log(isNumber(+1000.000001))
console.log(isNumber(1))
console.log(isNumber(-10.0))
console.log(isNumber(+1000.000001))

//Expected fail
console.log(isNumber("FF"))
console.log(isNumber("1e1"))
console.log(isNumber("seven"))
2
ответ дан 31 October 2019 в 13:24

Лучшим и современным путем является typeof (переменная) при заботе о вещественном числе не о числе от строки. Например:

var a = 1;
var b = '1';

typeof a: // Output: "number"
typeof b: // Output: "string
0
ответ дан 31 October 2019 в 13:24

Другие вопросы по тегам:

Похожие вопросы: