ตรวจสอบว่าสตริงอินพุตมีตัวเลขในจาวาสคริปต์หรือไม่


137

เป้าหมายสุดท้ายของฉันคือการตรวจสอบความถูกต้องของฟิลด์อินพุต อินพุตอาจเป็นตัวอักษรหรือตัวเลข


4
คุณไม่ต้องการ jQuery
Šime Vidas

โปรดแก้ไขชื่อคำถามของคุณเพื่อให้มีความถูกต้องมากขึ้นเช่น "อินพุต jQuery ตรวจสอบเฉพาะอักขระที่เป็นตัวอักษร" เนื่องจากคำอธิบายของคุณไม่มีคำตอบสำหรับ "วิธีค้นหาตัวเลขในสตริง" ดังนั้นผลลัพธ์ในผลลัพธ์การค้นหาที่ไม่เกี่ยวข้องสำหรับชุมชนของเรา ขอบคุณ!
Juanma Guerrero

แก้ไข "jQuery" จากชื่อคำถามและแทนที่ด้วย "Javascript"
VKen

@VKen ไม่จำเป็นต้องใส่แท็กในชื่อ
Starx

@Starx กล่าวว่าฉันแค่รักษารูปแบบที่โพสต์คำถามเริ่มต้นด้วย
VKen

คำตอบ:


288

หากฉันไม่เข้าใจผิดคำถามต้องมี "number number" ไม่ใช่ "is number" ดังนั้น:

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

1
สิ่งที่ฉันต้องการ ขอบคุณ
AndyH

วิธีนี้ไม่ได้คำนึงถึงตัวเลขที่ไม่ใช่จำนวนเต็มเช่น 3.2 หรือ 1e4
ekkis

8
มันทำ Check in console: hasNumber ("check 3.2 or 1e4") = true vs hasNumber ("check no numbers") = false เนื่องจาก 3.2 และ 1e4 มีตัวเลขอยู่ในตัวเอง
Zon

ทำไมคำตอบนี้ไม่ได้อยู่ด้านบน?
Rakesh Nair

มันเป็นคำตอบที่ตรงกับคำถาม
Zon

108

คุณสามารถทำได้โดยใช้ javascript ไม่จำเป็นต้องมี Jquery หรือ Regex

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

ขณะดำเนินการ

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

อัปเดต: หากต้องการตรวจสอบว่าสตริงมีตัวเลขอยู่หรือไม่คุณสามารถใช้นิพจน์ทั่วไปเพื่อทำสิ่งนั้นได้

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

2
matches != nullไม่ได้หมายถึงundefinedหรือnullในขณะที่matches !== nullวิธีการโดยเฉพาะไม่ได้แต่ผ่านไปnull undefined
เนท

match()nullส่งกลับอาร์เรย์หรือ ดังนั้นif (matches !== null)ควรจะดี (และมันจะโปรด JSHint.) ที่มา: developer.mozilla.org/en/docs/Web/JavaScript/Reference/ …
เจสัน

มันควรจะเป็นisFinite(parseFloat(n))ในตัวอย่างแรก isNumeric("5,000")ล้มเหลว
m.spyratos

@ m.spyratos เอาล่ะisFinite()ให้ความจริงถ้าค่าที่ส่งเป็นfiniteตัวเลขและตัวเลข5,000เป็นสตริงที่จัดรูปแบบของตัวเลขไม่ใช่จำนวน จำกัด
Starx

@Starx ฉันเห็นด้วย แต่ถ้าคุณไม่สนับสนุนรูปแบบสตริงเป็น input แล้วทำไมคุณใช้ลอยแยกในisNaN? ฉันอยากจะแนะนำให้ลบ parse float จากisNaNหรือเพิ่มลงในนั้นเพื่อisFiniteประกอบ
m.spyratos

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

ฉันต้องอ่านคำถามทั้งหมดเพื่อตระหนักว่าสิ่งนี้ตอบคำถามที่ถูกถามจริง ชื่อคำถามนั้นหลอกลวงเล็กน้อย
เนท

9

มันไม่ได้เป็นกระสุน แต่อย่างใด แต่มันก็ใช้งานได้ตามวัตถุประสงค์ของฉันและอาจช่วยคนได้

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 นิพจน์ทั่วไปเป็นสตริงข้อความพิเศษสำหรับอธิบายรูปแบบการค้นหาซึ่งเขียนในรูปแบบของ / pattern / modifiers โดยที่ "pattern" เป็นนิพจน์ปกตินั้นเองและ "modifiers" เป็นชุดอักขระที่ระบุตัวเลือกต่างๆ ชั้นตัวมากที่สุดคือแนวคิด regex พื้นฐานหลังจากการแข่งขันที่แท้จริง มันทำให้ตัวละครเล็ก ๆ เรียงตามลำดับตัวละครที่ใหญ่ขึ้น ตัวอย่างเช่นสามารถยืนสำหรับตัวอักษรตัวพิมพ์ใหญ่และอาจหมายถึงหลักใด ๆ
         [A-Z]\d

จากตัวอย่างด้านล่าง

ตัวอย่าง:

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

ออกวาง:

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ด้วยนิพจน์ปกติ


4

เพื่อทดสอบว่าตัวอักษรใด ๆ เป็นตัวเลขโดยไม่ต้อง overkill to จะปรับได้ตามต้องการ

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

วิธีหนึ่งในการตรวจสอบคือการวนซ้ำสตริงและส่งกลับค่าจริง (หรือเท็จขึ้นอยู่กับสิ่งที่คุณต้องการ) เมื่อคุณกดตัวเลข

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 ไม่จำเป็นต้องมี Jquery หรือ Regex

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

14
overkill อาจเป็นเพียงแค่function isNumeric(n) { return !isNaN(n); }
Luca Steeb

นี่ยังไม่ตรวจสอบเพื่อดูว่าตัวละครใด ๆ ที่เป็นตัวเลข แต่ฉันสามารถคิดถึงวิธีแก้ปัญหาที่ได้แรงบันดาลใจจากสิ่งนี้
Tyler Lazenby

0

รหัสนี้ยังช่วยในการ"การตรวจจับหมายเลขในสตริงที่กำหนด"เมื่อพบว่ามันหยุดการทำงาน

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 จัดเตรียมจำนวนเต็มเมื่อสตริงเริ่มต้นด้วยการแสดงจำนวนเต็ม:

(parseInt '1a')  is  1

.. ดังนั้นบางที:

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 ของฉัน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.