Periksa apakah string input berisi angka dalam javascript

146

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

Udara SS Liyanage
sumber
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);
}
Zon
sumber
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');
}
Starx
sumber
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.');      
}
Jishnu AP
sumber
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.");
 }
Elon Zito
sumber
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.

Yash
sumber
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)

NVRM
sumber
3

Inilah yang Anda butuhkan.

      var hasNumber = /\d/;   
      hasNumber.test("ABC33SDF");  //true
      hasNumber.test("ABCSDF");  //false 
Usama Tahir
sumber
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;
        }
    }
}
Herbert Su
sumber
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.

Neil Stockbridge
sumber
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);
}
pengguna2164619
sumber
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_;
}
Khan Usama
sumber
-2

Anda juga bisa mencoba lodash:

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