문자열에 숫자 만 포함되어 있는지 확인


324

string숫자 만 포함되어 있는지 확인하고 싶습니다 . 나는 이것을 사용했다 :

var isANumber = isNaN(theValue) === false;

if (isANumber){
    ..
}

그러나 그것은 또한 수 있다는 실현 +하고 -. 기본적으로 나는 input숫자 만 포함하고 다른 문자 는 포함하지 않기를 원합니다 . +100그리고 -5둘 다 숫자 이므로 isNaN()올바른 방법이 아닙니다. 아마도 정규 표현식이 필요한 것입니까? 팁이 있습니까?

답변:


644

어때?

var isnum = /^\d+$/.test(val);

1
대단해! 나는 십진수 인 숫자를 언급하지 않는 것이 궁금하다?
dewwwald

5
@dewwwald : 일부 언어는 다르게 구현하지만, 자바 스크립트, \d이다 정확히 동일합니다 [0-9].
Ry-

여기에 당신은에 대한 설명서를 찾을 수있는 방법 Regular Expressions
Danfoa

6
/^\d*$/대신 숫자 만 포함 된 빈 문자열을 찾으면 .
Константин Ван

@DrorBar 나는 영어 실력이 좋지 않아서 죄송합니다.“빈 문자열에 숫자 만 있는 것으로 생각되는 경우 ”
Константин Ван


16
String.prototype.isNumber = function(){return /^\d+$/.test(this);}
console.log("123123".isNumber()); // outputs true
console.log("+12".isNumber()); // outputs false

2
(미래 ECMA 버전 이상 놀라움의 원칙과 충돌 가능성)에 내장 된 객체의 프로토 타입을 수정하는 자바 스크립트 나쁜 연습 간주 - 고려 isNumber = () => /^\d+$/.test(this);하는 대신, 사용 등console.log(isNumber("123123));
닉 불

2
FWIW는이 답변이 게시 된 2009 년에 아직 나쁜 습관으로 간주되지 않았습니다. jQuery가 아직 승리하기 전에 이미 존재했던 여러 jQuery 경쟁 업체들이 모든 프로토 타입 확장을 실행했습니다.
balupton

14

부동 소수점 값 (점으로 구분 된 값)도 지원하려면이 표현식을 사용할 수 있습니다.

var isNumber = /^\d+\.\d+$/.test(value);

그러나 float을 int를 사용하지 않으면 "?"를 사용하여 false를 반환합니다. ". \"후에 해결되었습니다. 이 /^\d+[\.,\,]?\d+$/.test(value)를 제안하여 쉼표와 소수점을 모두 허용합니다 (나중에 쉼표를 점으로 변환 할 수 있음)
Lucke

@Lucke, 당신이 제안한 정규 표현식은 십진수 또는 9보다 큰 숫자 만 찾을 수 있습니다. 첫 번째 \d+를로 변경하면 \d*?0-9와 일치 할 수있을뿐만 아니라 .333
Gust van

5
닫기 : var isNumber = /^\d*\.?\d+$/.test(value)- '3.5', '.5', '3'과 일치- '3'과 일치하지 않습니다
Peter Hollingsworth

7

문자열에 숫자 만 포함되어 있는지 확인하는 또 다른 재미 있고 읽기 쉬운 방법이 있습니다.

이 메소드는 spread 연산자를 사용하여 문자열을 배열로 분할 한 다음이 every()메소드를 사용 하여 배열의 모든 요소 (문자) 가 숫자 문자열에 포함 되는지 테스트합니다 '0123456789'.

const digits_only = string => [...string].every(c => '0123456789'.includes(c));

console.log(digits_only('123')); // true
console.log(digits_only('+123')); // false
console.log(digits_only('-123')); // false
console.log(digits_only('123.')); // false
console.log(digits_only('.123')); // false
console.log(digits_only('123.0')); // false
console.log(digits_only('0.123')); // false
console.log(digits_only('Hello, world!')); // false


1
이것은 또한 true빈 문자열 ''과 빈 배열 [], 정수 배열을 반환 합니다 [1, 2, 3](한 번은 <10 임). /^\d+$/내가 생각 하는 기본 정규 표현식보다 버그 / 오용이 더 쉽다
Drenai


5

정규식을 사용하지 않는 솔루션은 다음과 같습니다.

function onlyDigits(s) {
  for (let i = s.length - 1; i >= 0; i--) {
    const d = s.charCodeAt(i);
    if (d < 48 || d > 57) return false
  }
  return true
}

여기서 48과 57은 각각 "0"과 "9"의 문자 코드입니다.


5
function isNumeric(x) {
    return parseFloat(x).toString() === x.toString();
}

이것은 false선행 또는 후행 0이있는 문자열에서 반환 됩니다.


2

다음 정규식을 사용할 수 있습니다.

^\d+$

1

float 값을 포함하려면 다음 코드를 사용할 수 있습니다

theValue=$('#balanceinput').val();
var isnum1 = /^\d*\.?\d+$/.test(theValue);
var isnum2 =  /^\d*\.?\d+$/.test(theValue.split("").reverse().join(""));
alert(isnum1+' '+isnum2);

'.'으로 구분 된 숫자와 숫자 만 테스트합니다. 첫 번째 테스트는 0.1 및 0과 같은 값을 포함하지만 0.1을 허용하지 않으므로 0을 허용하지 않습니다. 따라서 제안하는 솔루션은 theValue를 반대로하여 .1이 1이되도록하는 것입니다.

예 :

 theValue=3.4; //isnum1=true , isnum2=true 
theValue=.4; //isnum1=true , isnum2=false 
theValue=3.; //isnum1=flase , isnum2=true 

-1
c="123".match(/\D/) == null #true
c="a12".match(/\D/) == null #false

문자열에 숫자 만 포함 된 경우 null을 반환합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.