자바 스크립트에서 입력 문자열에 숫자가 포함되어 있는지 확인


137

최종 목표는 입력 필드의 유효성을 검사하는 것입니다. 입력은 알파벳 또는 숫자 일 수 있습니다.


4
이를 위해 jQuery가 필요하지 않습니다.
Šime Vidas

설명이 "문자열에서 숫자를 찾는 방법"에 대한 답변을 얻지 못하기 때문에 질문 제목을 "jQuery 입력은 알파벳 문자로만 유효성 검사"와 같이 더 정확한 것으로 편집하십시오. 감사!
Juanma Guerrero

질문 제목에서 "jQuery"를 편집하고 "Javascript"로 교체했습니다.
VKen

@VKen, 제목에 태그를 넣을 필요는 없습니다.
Starx

@Starx는 질문 포스터가 시작한 형식을 그대로 유지한다고 지적했습니다.
VKen

답변:


288

내가 실수하지 않으면 질문에 "숫자"가 아니라 "숫자 포함"이 필요합니다. 그래서:

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

1
정확히 내가 필요한 것. 감사합니다
AndyH

이 솔루션은 3.2 또는 1e4와 같은 정수가 아닌 숫자를 고려하지 않습니다
ekkis

8
그렇습니다. 콘솔 체크인 : hasNumber ( "check 3.2 or 1e4") = true vs hasNumber ( "check no numbers") = false. 3.2와 1e4는 숫자 자체를 포함하기 때문입니다.
Zon

이 답변이 왜 맨 위에 있지 않습니까?
Rakesh Nair

질문에 정확히 답합니다.
Zon

108

자바 스크립트를 사용하여이 작업을 수행 할 수 있습니다. 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.
Nate

match()배열 또는을 반환합니다 null. 그래서 if (matches !== null)좋을 것입니다 (그리고 JSHint를 기쁘게 할 것입니다) 출처 : developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Jason

isFinite(parseFloat(n))첫 번째 예에 있어야합니다 . isNumeric("5,000")실패합니다.
m.spyratos

@ m.spyratos isFinite()는 전달 된 값이 finite숫자이고 숫자 5,000가 유한 숫자가 아닌 형식화 된 문자열 인 경우 true를 제공합니다 .
Starx

@Starx, 동의합니다. 그러나 형식화 된 문자열을 입력으로 지원하지 않으면 왜 parse float을 사용 isNaN합니까? 구문 분석 부동을 제거 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.');      
}

나는 이것이 실제로 묻는 정확한 질문에 답하기 위해 전체 질문을 읽어야했습니다. 질문 제목은 약간 기만적입니다.
Nate

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"는 다양한 옵션을 나타내는 일련의 문자입니다. 문자 클래스
          문자 그대로 경기 후 가장 기본적인 정규 표현식의 개념이다. 하나의 작은 문자 시퀀스가 ​​더 큰 문자 세트와 일치하게합니다. 예를 들어 [A-Z]대문자 알파벳을 \d의미 할 수 있으며 모든 숫자를 의미 할 수 있습니다.

아래 예에서

  • contains_alphaNumeric«문자열에 문자 또는 숫자 (또는 문자와 숫자)가 포함되어 있는지 확인합니다. 그만큼하이픈 (-) 무시됩니다 .
  • onlyMixOfAlphaNumeric «그것은 문자열이 모두 포함되어 있는지 확인 과 문자 순서가 순서 순서 .

예:

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

과잉이없는 숫자가 어떤 문자인지 테스트하여 필요에 따라 조정합니다.

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

그것을 확인하는 한 가지 방법은 문자열을 반복하고 숫자를 칠 때 true (또는 원하는 것에 따라 false)를 반환하는 것입니다.

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

자바 스크립트를 사용하여이 작업을 수행 할 수 있습니다. Jquery 또는 Regex 필요 없음

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

14
지나침. 단지가 될 수function isNumeric(n) { return !isNaN(n); }
루카 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를 용서하십시오.


-1

lodash를 시도 할 수도 있습니다.

const isNumeric = number => 
  _.isFinite(_.parseInt(number)) && !_.isNaN(_.parseInt(number))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.