Перевірте, чи містить рядок введення число в JavaScript


137

Моя кінцева мета - перевірити поле введення. Вхід може бути алфавітним або числовим.


4
Для цього вам не потрібен jQuery.
Šime Vidas

Будь ласка, відредагуйте назву запитання на щось більш точне, як-от "введення jQuery підтверджує лише алфавітні символи", оскільки ваш опис не дає відповіді на тему "як знайти числа в рядку", тому це призводить до неактуального результату пошуку для нашої спільноти. Дякую!
Хуанма Герреро

Відредаговано "jQuery" поза заголовком питання та замінено на "Javascript".
VKen

@VKen, Не потрібно ставити теги на заголовок.
Starx

@Starx зазначив, що я просто зберігаю формат, з якого розпочався плакат із запитаннями.
VKen

Відповіді:


288

Якщо я не помиляюся, питання вимагає "містить число", а не "є число". Так:

function hasNumber(myString) {
  return /\d/.test(myString);
}

1
Саме те, що мені було потрібно. Спасибі
AndyH

це рішення не враховує не цілі числа, такі як 3.2 або 1e4
ekkis

8
Це робить. Перевірте в консолі: hasNumber ("перевірити 3.2 або 1e4") = true vs hasNumber ("перевірити немає чисел") = false. Тому що 3.2 і 1e4 містять у собі числа.
Зон

Чому ця відповідь не вгорі?
Ракеш Найр

Він точно відповідає на поставлене питання.
Зон

108

Це можна зробити за допомогою javascript. Не потрібно Jquery або Regex

function isNumeric(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

Під час впровадження

var val = $('yourinputelement').val();
if(isNumeric(val)) { alert('number'); } 
else { alert('not number'); }

Оновлення: щоб перевірити, чи рядок містить цифри, ви можете використовувати регулярні вирази для цього

var matches = val.match(/\d+/g);
if (matches != null) {
    alert('number');
}

2
matches != nullзасіб не undefinedчи в nullтой час як matches !== nullкошти , спеціально НЕ nullале проходить undefined.
Нейт

match()повертає масив або null. Тож if (matches !== null)має бути добре (і це сподобається JSHint.) Джерело: developer.mozilla.org/uk/docs/Web/JavaScript/Reference/…
Джейсон

Це має бути isFinite(parseFloat(n))в першому прикладі. isNumeric("5,000")не вдається.
m.spyratos

@ m.spyratos, Добре, isFinite()дає істину, якщо передане значення - це finiteчисло, а число 5,000- це відформатований рядок числа, а не кінцеве число.
Starx

@Starx, я згоден. Але якщо ви не підтримуєте відформатований рядок як вхід, тоді для чого ви використовуєте плаваючий аналіз isNaN? Я б запропонував або вилучити float з розбору isNaNабо додати його до isFiniteтого, щоб він складався.
m.spyratos

22
function validate(){    
    var re = /^[A-Za-z]+$/;
    if(re.test(document.getElementById("textboxID").value))
       alert('Valid Name.');
    else
       alert('Invalid Name.');      
}

Мені довелося прочитати все питання, щоб зрозуміти, що це насправді відповідає на точне запитання. Назва питання трохи оманливий.
Нейт

9

Це не є кулезахисним будь-якими способами, але він працював для моїх цілей і, можливо, комусь допоможе.

var value = $('input').val();
 if(parseInt(value)) {
  console.log(value+" is a number.");
 }
 else {
  console.log(value+" is NaN.");
 }

Boolean(parseInt(3)) -> true; Boolean(parseInt("3")) -> true; Boolean(parseInt("three")) -> false
Елон Зіто

5

Використання регулярних виразів із JavaScript . Регулярний вираз - це спеціальний текстовий рядок для опису шаблону пошуку, який записується у вигляді / pattern / модифікаторів, де "pattern" є самим регулярним виразом, а "модифікатори" - це ряд символів, що вказують на різні параметри.
         Клас символів - це найосновніша концепція регулярних виразів після буквальної відповідності. Це робить одну невелику послідовність символів збільшеною набір символів. Наприклад, [A-Z]може означати алфавіт верхнього регістру і \dможе означати будь-яку цифру.

Знизу приклад

  • contains_alphaNumeric«Він перевіряє, що рядок містить або літеру, або цифру (або) і букву, і цифру. Дефіс (-) ігнорується .
  • onlyMixOfAlphaNumeric«Він перевіряє, чи містять рядки і букви, і цифри лише будь-якого порядку послідовності.

Приклад:

function matchExpression( str ) {
    var rgularExp = {
        contains_alphaNumeric : /^(?!-)(?!.*-)[A-Za-z0-9-]+(?<!-)$/,
        containsNumber : /\d+/,
        containsAlphabet : /[a-zA-Z]/,

        onlyLetters : /^[A-Za-z]+$/,
        onlyNumbers : /^[0-9]+$/,
        onlyMixOfAlphaNumeric : /^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$/
    }

    var expMatch = {};
    expMatch.containsNumber = rgularExp.containsNumber.test(str);
    expMatch.containsAlphabet = rgularExp.containsAlphabet.test(str);
    expMatch.alphaNumeric = rgularExp.contains_alphaNumeric.test(str);

    expMatch.onlyNumbers = rgularExp.onlyNumbers.test(str);
    expMatch.onlyLetters = rgularExp.onlyLetters.test(str);
    expMatch.mixOfAlphaNumeric = rgularExp.onlyMixOfAlphaNumeric.test(str);

    return expMatch;
}

// HTML Element attribute's[id, name] with dynamic values.
var id1 = "Yash", id2="777", id3= "Yash777", id4= "Yash777Image4"
    id11= "image5.64", id22= "55-5.6", id33= "image_Yash", id44= "image-Yash"
    id12= "_-.";
console.log( "Only Letters:\n ", matchExpression(id1) );
console.log( "Only Numbers:\n ", matchExpression(id2) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id3) );
console.log( "Only Mix of Letters and Numbers:\n ", matchExpression(id4) );

console.log( "Mixed with Special symbols" );
console.log( "Letters and Numbers :\n ", matchExpression(id11) );
console.log( "Numbers [-]:\n ", matchExpression(id22) );
console.log( "Letters :\n ", matchExpression(id33) );
console.log( "Letters [-]:\n ", matchExpression(id44) );

console.log( "Only Special symbols :\n ", matchExpression(id12) );

Покладене місце:

Only Letters:
  {containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: true, mixOfAlphaNumeric: false}
Only Numbers:
  {containsNumber: true, containsAlphabet: false, alphaNumeric: true, onlyNumbers: true, onlyLetters: false, mixOfAlphaNumeric: false}
Only Mix of Letters and Numbers:
  {containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true}
Only Mix of Letters and Numbers:
  {containsNumber: true, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: true}
Mixed with Special symbols
Letters and Numbers :
  {containsNumber: true, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Numbers [-]:
  {containsNumber: true, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Letters :
  {containsNumber: false, containsAlphabet: true, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Letters [-]:
  {containsNumber: false, containsAlphabet: true, alphaNumeric: true, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}
Only Special symbols :
  {containsNumber: false, containsAlphabet: false, alphaNumeric: false, onlyNumbers: false, onlyLetters: false, mixOfAlphaNumeric: false}

java Шаблон узгодження з регулярними виразами.


4

Щоб перевірити, чи є якась символьна цифра, без надмірного вбивства❓, яку слід адаптувати за потребою.

const s = "EMA618"

function hasInt(me){
  let i = 1,a = me.split(""),b = "",c = "";
  a.forEach(function(e){
   if (!isNaN(e)){
     console.log(`CONTAIN NUMBER «${e AT POSITION ${a.indexOf(e)} => TOTAL COUNT ${i}`)
     c += e
     i++
   } else {b += e}
  })
  console.log(`STRING IS «${b}», NUMBER IS «${c}»`)
  if (i === 0){
    return false
    // return b
  } else {
    return true
    // return +c
  }
}


hasInt(s)


2

Один із способів перевірити це - провести цикл через рядок і повернути true (або false, залежно від того, що ви хочете) при натисканні на число.

function checkStringForNumbers(input){
    let str = String(input);
    for( let i = 0; i < str.length; i++){
              console.log(str.charAt(i));
        if(!isNaN(str.charAt(i))){           //if the string is a number, do the following
            return true;
        }
    }
}

0

Це можна зробити за допомогою javascript. Не потрібно Jquery або Regex

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}

14
Перевищення. Може бути простоfunction isNumeric(n) { return !isNaN(n); }
Лука Стіб

Це також не перевіряє, чи будь-який символ є числом. Але я можу придумати рішення, натхнене цим.
Тайлер Лазенбі

0

Цей код також допомагає "Виявити числа в заданій рядку", коли знайдені числа зупиняють його виконання.

function hasDigitFind(_str_) {
  this._code_ = 10;  /*When empty string found*/
  var _strArray = [];

  if (_str_ !== '' || _str_ !== undefined || _str_ !== null) {
    _strArray = _str_.split('');
    for(var i = 0; i < _strArray.length; i++) {
      if(!isNaN(parseInt(_strArray[i]))) {
        this._code_ = -1;
        break;
      } else {
        this._code_ = 1;
      }
    }

  }
  return this._code_;
}

0

parseInt надає цілі числа, коли рядок починається з представлення цілого числа:

(parseInt '1a')  is  1

..так, можливо:

isInteger = (s)->
  s is (parseInt s).toString()  and  s isnt 'NaN'

(isInteger 'a') is false
(isInteger '1a') is false
(isInteger 'NaN') is false
(isInteger '-42') is true

Вибачте мій CoffeeScript.


-1

Ви також можете спробувати lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.