2013-10-29 7 views
3

과학적 표기법을 위반하지 않는 한 모든 숫자가 아닌 문자를 스트립하는 자바에서 숫자를 지우는 방법을 찾고 있습니다. 예를 들어, 내가 ... 다음과 같은 출력을 위해과학 표기법을 제외한 모든 숫자가 아닌 문자를 제거하는 정규식

  • 123.45을 찾고 있어요 =>123.45
  • 1a23.45 =>123.45
  • 1a23.4re5 =>123.45
  • *(@#123.45jkd =>123.45
  • 7.71234e+1 =>7.71234e+1

먼저 .으로 분할하고 두 개의 다른 부분으로 번호를 처리하는 것이 더 행복합니다.

+1

? "NaN"은 숫자입니까? "Infinity"는 어떻습니까? "0xABC123"은 어떻습니까?'e'(즉, "1.23e4")를 사용하여 가능한 10 진수의 십진수에만 관심이 있습니까? 자본'E'는? – zzzzBov

답변

1

당신은 대체 /이 검색을 시도 할 수 있습니다 :

pattern: /([0-9]e[-+][0-9])|[^-+0-9.]/gi 
replacement: $1 

예 :

var result = yourNbr.replace(/(\de[-+]\d)|[^-+0-9.]/gi, '$1'); 
0

이 시도 :

var dirty_text = '*(@#123.45jkd'; 
var clean_text = dirty_text.replace(/(?![+-]?\d*\.?\d+|e[+-]\d+)[^0-9]/g,''); 

가 여기 각각의 예와 a working jsFiddle example입니다.

이와 같은 문자열 정리 루틴은 모든 키를 누를 때마다 실행되지 않는 한 많은 문제가 발생할 수 있습니다. 예를 들어, x123.45e+5123.45e+5으로 정리해야합니다. 사용자가 123.45e+5678.9e+10을 입력하면 정리하는 것이 좋습니다. 어느 시점에서 $1,234.56과 같이 하나 또는 두 개의 길잃은 문자가있는 경우 이 무엇인지 알기가 어렵습니다. 돌아 오는 데는이 필요합니다.

3
당신은 숫자로 평가되는 문자열을 반환 할 수 있습니다

,

과 그렇지 않은 사람을 청소합니다. 당신이 번호로 문자열을 변환하여 반환 할 수 있습니다 7.71234e + 1

또는

function cleanNumber(num){ 
    var N= Number(num); 
    if(parseFloat(num)=== N) return num; 
    return num.replace(/\D+/g, '') || '0'; 
} 

cleanNumber ('7.71234e + 1')

(문자열) 번호 -

function cleanNumber2(num){ 
    var N= Number(num); 
    if(parseFloat(num)=== N) return N; 
    return Number(num.replace(/\D+/g, '')) || 0; 
} 

cleanNumber2 ('7.71234e + 1');

(수) "숫자"를 구성 무엇 77.1234

관련 문제