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.


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

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

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.');      
}

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.");
 }

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.


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)


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

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
   }
}

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_;
}

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.


-1

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

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.