Periksa apakah string input berisi angka dalam javascript


146

Tujuan akhir saya adalah memvalidasi bidang masukan. Masukan dapat berupa alfabet atau numerik.


4
Anda tidak perlu jQuery untuk itu.
Šime Vidas

Harap edit judul pertanyaan Anda, ke sesuatu yang lebih akurat seperti "masukan jQuery hanya memvalidasi karakter alfabet" karena deskripsi Anda tidak menghasilkan jawaban tentang "cara menemukan angka dalam string", sehingga menghasilkan hasil penelusuran yang tidak relevan untuk komunitas kami. Terima kasih!
Juanma Guerrero

Mengedit "jQuery" dari judul pertanyaan, dan diganti dengan "Javascript".
VKen

@VKen, Tidak perlu memberi tag pada judul.
Starx

@Starx mencatat, saya hanya mempertahankan format poster pertanyaan yang dimulai.
VKen

Jawaban:


308

Jika saya tidak salah, pertanyaannya membutuhkan "berisi angka", bukan "adalah angka". Begitu:

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

1
Persis yang saya butuhkan. Terima kasih
AndyH

solusi ini tidak memperhitungkan angka non-integer seperti 3,2 atau 1e4
ekkis

8
Memang. Periksa di konsol: hasNumber ("check 3.2 atau 1e4") = true vs hasNumber ("check no numbers") = false. Karena 3.2 dan 1e4 mengandung angka itu sendiri.
Zon

Mengapa jawaban ini tidak ada di atas?
Rakesh Nair

Itu persis menjawab pertanyaan yang diajukan.
Zon

112

Anda dapat melakukan ini menggunakan javascript. Tidak perlu Jquery atau Regex

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

Saat menerapkan

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

Pembaruan: Untuk memeriksa apakah sebuah string memiliki angka di dalamnya, Anda dapat menggunakan ekspresi reguler untuk melakukannya

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

2
matches != nullberarti tidak undefinedatau nullsementara matches !== nullberarti secara khusus tidak nulltetapi lewat undefined.
Nate

match()mengembalikan array atau null. Jadi if (matches !== null)seharusnya baik-baik saja (dan itu akan menyenangkan JSHint.) Sumber: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason

Ini harus ada isFinite(parseFloat(n))di contoh pertama. isNumeric("5,000")gagal.
m.spyratos

@ m.spyratos, Baiklah, isFinite()memberikan true jika nilai yang diteruskan adalah finiteangka dan angka 5,000adalah string berformat angka bukan angka terbatas.
Starx

@Starx, saya setuju. Tetapi jika Anda tidak mendukung string yang diformat sebagai input, lalu mengapa Anda menggunakan parse float in isNaN? Saya akan menyarankan untuk menghapus parse float dari isNaNatau menambahkannya isFinitejuga agar terdiri.
m.spyratos

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

Saya harus membaca seluruh pertanyaan untuk menyadari bahwa ini benar-benar menjawab pertanyaan yang diajukan. Judul pertanyaannya sedikit menipu.
Nate

9

Ini bukan antipeluru dengan cara apa pun, tetapi itu berhasil untuk tujuan saya dan mungkin itu akan membantu seseorang.

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

7

Menggunakan Ekspresi Reguler dengan JavaScript . Ekspresi reguler adalah string teks khusus untuk mendeskripsikan pola penelusuran, yang ditulis dalam bentuk / pola / pengubah di mana "pola" adalah ekspresi reguler itu sendiri, dan "pengubah" adalah rangkaian karakter yang menunjukkan berbagai opsi.
         Kelas karakter adalah konsep ekspresi reguler paling dasar setelah pencocokan literal. Itu membuat satu urutan kecil karakter cocok dengan kumpulan karakter yang lebih besar. Misalnya, [A-Z]bisa berarti alfabet huruf besar, dan \dbisa berarti digit apa saja.

Dari contoh di bawah ini

  • contains_alphaNumeric«Ia memeriksa apakah string berisi huruf atau angka (atau) huruf dan angka. Tanda hubung (-) diabaikan .
  • onlyMixOfAlphaNumeric«Ia memeriksa string yang berisi huruf dan angka hanya dengan urutan urutan apa pun.

Contoh:

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

Keluaran:

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

Pencocokan Pola java dengan Ekspresi Reguler.


4

Untuk menguji apakah ada karakter yang berupa angka, tanpa pembunuhan berlebihan❓, untuk diadaptasi sesuai kebutuhan.

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)


3

Inilah yang Anda butuhkan.

      var hasNumber = /\d/;   
      hasNumber.test("ABC33SDF");  //true
      hasNumber.test("ABCSDF");  //false 

2

Salah satu cara untuk memeriksanya adalah dengan mengulang melalui string dan mengembalikan true (atau false tergantung pada apa yang Anda inginkan) saat Anda menekan angka.

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

1

parseInt menyediakan integer ketika string dimulai dengan representasi integer:

(parseInt '1a')  is  1

..jadi mungkin:

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

Maafkan CoffeeScript saya.


Pada dasarnya, parseInt('10m') /* returns 10*/akan melakukan trik jika string dimulai dengan angka. Jika tidak, mengembalikan NaN. Jika semua perilaku ini baik untuk Anda, pertimbangkan parseFloat('2.34million')agar Anda mendapatkan 2,34 daripada kehilangan uang ;-)
mixdev

1

Anda dapat melakukan ini menggunakan javascript. Tidak perlu Jquery atau Regex

function isNumeric(n) 
{
  return !isNaN(n);
}

14
Pembunuhan berlebihan. Bisa jadi hanyafunction isNumeric(n) { return !isNaN(n); }
Luca Steeb

Ini juga tidak memeriksa untuk melihat apakah SETIAP karakter adalah angka. Tapi saya bisa memikirkan solusi yang terinspirasi oleh ini.
Tyler Lazenby

0

Kode ini juga membantu dalam, "Untuk Mendeteksi Angka dalam String yang Diberikan" ketika angka yang ditemukan itu menghentikan eksekusinya.

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

-2

Anda juga bisa mencoba lodash:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.