Sprawdź, czy ciąg wejściowy zawiera liczbę w javascript

137

Moim końcowym celem jest sprawdzenie poprawności pola wejściowego. Dane wejściowe mogą być alfabetyczne lub numeryczne.

Udara SS Liyanage
źródło
4
Nie potrzebujesz do tego jQuery.
Šime Vidas,
Zmień tytuł pytania na coś bardziej dokładnego, np. „JQuery input weryfikuje tylko znaki alfabetu”, ponieważ opis nie prowadzi do żadnej odpowiedzi na temat „jak znaleźć liczby w ciągu znaków”, dlatego wynik wyszukiwania jest nieistotny dla naszej społeczności. Dzięki!
Juanma Guerrero
Edytowano „jQuery” z tytułu pytania i zastąpiono „Javascript”.
VKen
@VKen, nie trzeba umieszczać tagów w tytule.
Starx
@Starx zauważył, po prostu zachowuję format, od którego zaczął się plakat z pytaniami.
VKen

Odpowiedzi:

288

Jeśli się nie mylę, pytanie wymaga „zawiera numer”, a nie „jest liczbą”. Więc:

function hasNumber(myString) {
  return /\d/.test(myString);
}
Zon
źródło
1
Dokładnie to, czego potrzebowałem. Dzięki
AndyH,
to rozwiązanie nie bierze pod uwagę liczb niecałkowitych, takich jak 3,2 lub 1e4
ekkis
8
To robi. Sprawdź w konsoli: hasNumber ("sprawdź 3.2 lub 1e4") = true vs hasNumber ("sprawdź bez numerów") = false. Ponieważ 3.2 i 1e4 zawierają same w sobie liczby.
Zon
Dlaczego ta odpowiedź nie jest na górze?
Rakesh Nair
To dokładnie odpowiada na postawione pytanie.
Zon
108

Możesz to zrobić za pomocą javascript. Nie ma potrzeby korzystania z Jquery ani Regex

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

Podczas wdrażania

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

Aktualizacja: Aby sprawdzić, czy ciąg zawiera liczby, możesz to zrobić za pomocą wyrażeń regularnych

var matches = val.match(/\d+/g);
if (matches != null) {
    alert('number');
}
Starx
źródło
2
matches != nulloznacza nie undefinedlub nullgdy matches !== nulloznacza specjalnie nie, nullale przechodzi undefined.
Nate
match()zwraca tablicę lub null. Więc if (matches !== null)powinno być dobrze (i będzie zadowolić JSHint.) Źródło: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason
Powinien być isFinite(parseFloat(n))w pierwszym przykładzie. isNumeric("5,000")zawodzi.
m.spyratos
@ m.spyratos, cóż, isFinite()daje prawdę, jeśli przekazana wartość jest finiteliczbą, a liczba 5,000jest sformatowanym ciągiem liczb, a nie liczbą skończoną.
Starx
@Starx, zgadzam się. Ale jeśli nie obsługujesz sformatowanego ciągu jako danych wejściowych, to dlaczego używasz parse float in isNaN? Sugerowałbym, aby usunąć parse float z isNaNlub dodać go do, isFiniteaby był składany.
m.spyratos
22
function validate(){    
    var re = /^[A-Za-z]+$/;
    if(re.test(document.getElementById("textboxID").value))
       alert('Valid Name.');
    else
       alert('Invalid Name.');      
}
Jishnu AP
źródło
Musiałem przeczytać całe pytanie, aby zdać sobie sprawę, że to faktycznie odpowiada dokładnie na zadane pytanie. Tytuł pytania jest trochę zwodniczy.
Nate
9

Nie jest w żaden sposób kuloodporny, ale zadziałał dla moich celów i może komuś pomoże.

var value = $('input').val();
 if(parseInt(value)) {
  console.log(value+" is a number.");
 }
 else {
  console.log(value+" is NaN.");
 }
Elon Zito
źródło
Boolean(parseInt(3)) -> true; Boolean(parseInt("3")) -> true; Boolean(parseInt("three")) -> false
Elon Zito
5

Używanie wyrażeń regularnych w JavaScript . Wyrażenie regularne to specjalny ciąg tekstowy opisujący wzorzec wyszukiwania, zapisywany w postaci / wzorzec / modyfikatory, gdzie „wzorzec” jest samym wyrażeniem regularnym, a „modyfikatory” to seria znaków wskazujących na różne opcje. Klasa postaci jest najbardziej podstawowa koncepcja regex po dosłownym meczu. Sprawia, że ​​jedna mała sekwencja znaków pasuje do większego zestawu znaków. Na przykład, może oznaczać wielkie litery alfabetu i dowolną cyfrę.
         [A-Z]\d

Z poniższego przykładu

  • contains_alphaNumeric«Sprawdza, czy ciąg zawiera literę lub cyfrę (lub) zarówno literę, jak i cyfrę. Myślnik (-) jest ignorowana .
  • onlyMixOfAlphaNumeric«Sprawdza, czy ciąg zawiera tylko litery i cyfry o dowolnej kolejności.

Przykład:

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) );

Wynik:

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 Dopasowywanie wzorców z wyrażeniami regularnymi.

Yash
źródło
4

Aby sprawdzić, czy jakikolwiek znak jest liczbą, bez przesady, którą należy dostosować w razie potrzeby.

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)

NVRM
źródło
2

Jednym ze sposobów sprawdzenia tego jest zapętlenie ciągu i zwrócenie prawdy (lub fałszu w zależności od tego, co chcesz), gdy trafisz liczbę.

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;
        }
    }
}
Herbert Su
źródło
0

Możesz to zrobić za pomocą javascript. Nie ma potrzeby korzystania z Jquery ani Regex

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}
user2164619
źródło
14
Przesada. Może być po prostufunction isNumeric(n) { return !isNaN(n); }
Luca Steeb
To również nie sprawdza, czy JAKIEKOLWIEK znak jest liczbą. Ale przychodzi mi do głowy inspirowane tym rozwiązanie.
Tyler Lazenby
0

Ten kod pomaga również w „Aby wykryć liczby w danym ciągu”, gdy znalezione liczby przerywają wykonywanie.

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_;
}
Khan Usama
źródło
0

parseInt zapewnia liczby całkowite, gdy ciąg zaczyna się od reprezentacji liczby całkowitej:

(parseInt '1a')  is  1

..więc może:

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

Pardon my CoffeeScript.

Neil Stockbridge
źródło
-1

Możesz także spróbować lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Darex1991
źródło