Überprüfen Sie, ob eine Eingabezeichenfolge eine Zahl in Javascript enthält

137

Mein Endziel ist es, ein Eingabefeld zu validieren. Die Eingabe kann entweder alphabetisch oder numerisch sein.

Udara SS Liyanage
quelle
4
Dafür benötigen Sie jQuery nicht.
Šime Vidas
Bitte bearbeiten Sie Ihren Fragentitel so, dass er genauer ist wie "jQuery-Eingabe nur alphabetische Zeichen validieren", da Ihre Beschreibung zu keiner Antwort auf "Wie finde ich Zahlen in einer Zeichenfolge?" Führt. Daher führt dies zu einem irrelevanten Suchergebnis für unsere Community. Vielen Dank!
Juanma Guerrero
"JQuery" aus dem Fragentitel heraus bearbeitet und durch "Javascript" ersetzt.
VKen
@VKen, Es ist nicht notwendig, Tags auf den Titel zu setzen.
Starx
@ Starx bemerkte, ich behalte nur das Format bei, mit dem das Fragenplakat begonnen hat.
VKen

Antworten:

287

Wenn ich mich nicht irre, erfordert die Frage "enthält Nummer", nicht "ist Nummer". So:

function hasNumber(myString) {
  return /\d/.test(myString);
}
Zon
quelle
1
Genau das, was ich brauchte. Vielen Dank
AndyH
Diese Lösung berücksichtigt keine nicht ganzzahligen Zahlen wie 3.2 oder 1e4
ekkis
8
Es tut. Check in Console: hasNumber ("check 3.2 oder 1e4") = true vs hasNumber ("check no numbers") = false. Weil 3.2 und 1e4 Zahlen an sich enthalten.
Zon
Warum steht diese Antwort nicht ganz oben?
Rakesh Nair
Es beantwortet genau die gestellte Frage.
Zon
108

Sie können dies mit Javascript tun. Keine Notwendigkeit für Jquery oder Regex

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

Während der Implementierung

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

Update: Um zu überprüfen, ob eine Zeichenfolge Zahlen enthält, können Sie dazu reguläre Ausdrücke verwenden

var matches = val.match(/\d+/g);
if (matches != null) {
    alert('number');
}
Starx
quelle
2
matches != nullbedeutet nicht undefinedoder nullwährend matches !== nullbedeutet spezifisch nicht nullaber geht vorbei undefined.
Nate
match()gibt ein Array zurück oder null. Also if (matches !== null)sollte es in Ordnung sein (und es wird JSHint gefallen.) Quelle: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason
Es sollte isFinite(parseFloat(n))im ersten Beispiel sein. isNumeric("5,000")schlägt fehl.
m.spyratos
@ m.spyratos, Nun, isFinite()gibt true an, wenn der übergebene Wert eine finiteZahl ist und number 5,000eine formatierte Zeichenfolge ist, keine endliche Zahl.
Starx
@ Starx, ich stimme zu. Wenn Sie jedoch keine formatierte Zeichenfolge als Eingabe unterstützen, warum verwenden Sie dann Parse Float In isNaN? Ich würde vorschlagen, entweder den Parse-Float zu entfernen isNaNoder ihn ebenfalls hinzuzufügen, um isFinitedarin zu bestehen.
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
quelle
Ich musste die ganze Frage lesen, um zu erkennen, dass dies genau die gestellte Frage beantwortet. Der Fragentitel täuscht ein wenig.
Nate
9

Es ist keineswegs kugelsicher, aber es hat für meine Zwecke funktioniert und vielleicht hilft es jemandem.

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

Verwenden regulärer Ausdrücke mit JavaScript . Ein regulärer Ausdruck ist eine spezielle Textzeichenfolge zur Beschreibung eines Suchmusters, die in Form von / pattern / modifiers geschrieben ist, wobei "pattern" der reguläre Ausdruck selbst ist und "modifiers" eine Reihe von Zeichen sind, die verschiedene Optionen angeben.
         Die Zeichenklasse ist das grundlegendste Regex-Konzept nach einer wörtlichen Übereinstimmung. Dadurch wird eine kleine Zeichenfolge mit einem größeren Zeichensatz übereinstimmen. Könnte beispielsweise [A-Z]für das Großbuchstaben stehen und \deine beliebige Ziffer bedeuten.

Aus dem folgenden Beispiel

  • contains_alphaNumeric«Es wird geprüft, ob die Zeichenfolge entweder Buchstaben oder Zahlen (oder) sowohl Buchstaben als auch Zahlen enthält. Der Bindestrich (-) wird ignoriert .
  • onlyMixOfAlphaNumeric«Es wird geprüft, ob Zeichenfolgen nur Buchstaben und Zahlen in beliebiger Reihenfolge enthalten.

Beispiel:

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

Ausgabe:

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 Pattern Matching mit regulären Ausdrücken.

Yash
quelle
4

Um zu testen, ob ein Zeichen eine Zahl ohne Overkill ist, muss es nach Bedarf angepasst werden.

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
quelle
2

Eine Möglichkeit, dies zu überprüfen, besteht darin, die Zeichenfolge zu durchlaufen und true (oder false, je nachdem, was Sie möchten) zurückzugeben, wenn Sie eine Zahl drücken.

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
quelle
0

Sie können dies mit Javascript tun. Keine Notwendigkeit für Jquery oder Regex

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}
user2164619
quelle
14
Overkill. Könnte nur seinfunction isNumeric(n) { return !isNaN(n); }
Luca Steeb
Dies prüft auch nicht, ob ein Zeichen eine Zahl ist. Aber ich kann mir eine Lösung vorstellen, die davon inspiriert ist.
Tyler Lazenby
0

Dieser Code hilft auch bei "Erkennen von Zahlen in einer bestimmten Zeichenfolge", wenn Zahlen gefunden wurden, dass die Ausführung gestoppt wird.

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
quelle
0

parseInt liefert Ganzzahlen, wenn die Zeichenfolge mit der Darstellung einer Ganzzahl beginnt:

(parseInt '1a')  is  1

..so vielleicht:

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

Verzeihen Sie mein CoffeeScript.

Neil Stockbridge
quelle
-1

Sie können auch lodash versuchen:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Darex1991
quelle