Bir giriş dizesinin javascript içinde bir sayı içerip içermediğini kontrol edin


137

Son hedefim bir girdi alanını doğrulamak. Giriş alfabetik veya sayısal olabilir.


4
Bunun için jQuery'ye ihtiyacınız yok.
Šime Vidas

Lütfen soru başlığınızı "jQuery girişi yalnızca alfabetik karakterleri doğrula" gibi daha doğru bir şekilde düzenleyin çünkü açıklamanız "bir dizede sayıların nasıl bulunacağı" konusunda hiçbir yanıt vermediğinden, topluluğumuz için alakasız bir arama sonucuyla sonuçlanır. Teşekkürler!
Juanma Guerrero

"JQuery", soru başlığı dışında düzenlendi ve "Javascript" ile değiştirildi.
VKen

@VKen, Başlığa etiket koymak gerekli değildir.
Starx

@Starx, soru posterinin başladığı formatı koruduğumu kaydetti.
VKen

Yanıtlar:


289

Yanılmıyorsam, soru "sayı içerir" değil, "sayı içerir" gerektirir. Yani:

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

1
Tam olarak ihtiyacım olan şey. Teşekkürler
AndyH

bu çözüm 3.2 veya 1e4 gibi tamsayı olmayan sayıları dikkate almaz
ekkis

8
Öyle. Konsolda kontrol et: hasNumber ("check 3.2 veya 1e4") = true vs hasNumber ("sayı kontrol et") = false. Çünkü 3.2 ve 1e4 kendi içinde sayılar içerir.
Zon

Bu cevap neden en üstte değil?
Rakesh Nair

Soruyu tam olarak cevaplıyor.
Zon

109

Javascript kullanarak bunu yapabilirsiniz. Jquery veya Regex'e gerek yok

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

Uygularken

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

Güncelleme: Bir dizenin içinde sayı olup olmadığını kontrol etmek için bunu yapmak için normal ifadeler kullanabilirsiniz

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

2
matches != nullyolu değildir undefinedya nullda matches !== nullaracı, özellikle değil nullama geçer undefined.
Nate

match()bir dizi veya döndürür null. Yani iyi if (matches !== null)olmalı (ve JSHint'i memnun edecektir.) Kaynak: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason

isFinite(parseFloat(n))İlk örnekte olmalı . isNumeric("5,000")başarısız olur.
m.spyratos

@ m.spyratos, Peki, isFinite()iletilen değer bir finitesayı ve sayı 5,000sonlu bir sayı değil, biçimlendirilmiş bir sayı dizgiyse doğrudur .
Starx

@Starx, katılıyorum. Ancak, biçimlendirilmiş dizeyi girdi olarak desteklemiyorsanız, neden ayrıştırmayı float kullanıyorsunuz isNaN? Ben ayrıştırmak şamandıra şamandıra kaldırmak isNaNveya eklemek için isFinitede eklemek için öneriyoruz .
m.spyratos

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

Bunun gerçekten sorulan soruyu cevapladığını anlamak için tüm soruyu okumak zorunda kaldım. Soru başlığı biraz aldatıcı.
Nate

9

Hiçbir şekilde kurşun geçirmez değil, ama benim amacım için çalıştı ve belki birine yardımcı olacaktır.

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

JavaScript ile Normal İfadeler Kullanma . Normal ifade, "desen" normal ifadenin kendisidir ve "değiştiriciler" çeşitli seçenekleri gösteren bir dizi karakterdir / arama / desen / değiştiriciler şeklinde yazılmış bir arama modelini tanımlamak için kullanılan özel bir metin dizesidir. Karakter sınıfı bir hazır maçtan sonra en temel regex kavramdır. Küçük bir karakter dizisini daha büyük bir karakter kümesiyle eşleştirir. Örneğin , büyük harfli alfabe anlamına gelebilir ve herhangi bir rakam anlamına gelebilir.
         [A-Z]\d

Aşağıdaki örnekten

  • contains_alphaNumeric«Dize harf veya sayı (veya) hem harf hem de sayı içerip içermediğini denetler. Kısa çizgi (-) yok sayılır .
  • onlyMixOfAlphaNumeric«Dize olup olmadığını kontrol eder, sadece herhangi bir sıra düzeninin hem harflerini hem de sayılarını içerir.

Misal:

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

Çıktı:

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}

Düzenli İfadeler ile Eşleşen java Kalıbı .


4

Herhangi bir karakterin gereğinden fazla adapte edilecek bir sayı olup olmadığını test etmek.

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

Bunu kontrol etmenin bir yolu, bir sayıya çarptığınızda dizede döngü yapmak ve true (veya ne istediğinize bağlı olarak false) döndürmektir.

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

Javascript kullanarak bunu yapabilirsiniz. Jquery veya Regex'e gerek yok

function isNumeric(n) {
  if(!isNaN(n))
    {
     return true
    }
  else
   {
    return false
   }
}

14
Aşırı yükleme. Sadece olabilirfunction isNumeric(n) { return !isNaN(n); }
Luca Steeb

Bu ayrıca HERHANGİ bir karakterin bir sayı olup olmadığını kontrol etmez. Ama bundan ilham alan bir çözüm düşünebilirim.
Tyler Lazenby

0

Bu kod ayrıca, sayılar çalışmasını durdurduğunda "Verilen Dizede Sayıları Algılamak" için de yardımcı olur .

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 dize bir tamsayının temsili ile başladığında tamsayı sağlar:

(parseInt '1a')  is  1

..belkide:

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

CoffeeScript'imi affedin.


-1

Ayrıca lodash'ı da deneyebilirsiniz:

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.