JavaScript에서 숫자가 아닌 문자를 문자열에서 제거


701

JavaScript / ECMAScript를 사용하여 문자열에서 숫자가 아닌 문자를 모두 제거하려는 DOM이 아닌 시나리오를 고려하십시오. 범위 내에있는 모든 문자를 0 - 9유지해야합니다.

var myString = 'abc123.8<blah>';

//desired output is 1238

일반 JavaScript로 어떻게 이것을 달성 할 수 있습니까? 이는 DOM 이외의 시나리오이므로 브라우저 및 키 누르기 이벤트와 관련된 jQuery 및 기타 솔루션은 적합하지 않습니다.

답변:


1430

숫자가 아닌 모든 문자와 일치하는 속기 문자 클래스 인 .replace정규식으로 문자열의 메소드를 사용하십시오 \D.

myString = myString.replace(/\D/g,'');

5
감사합니다 csj; 더 많은 정보를 찾을 수있는 곳이 \D있습니까?
p.campbell 2009

34
이것은 기본 정규 표현식 참조입니다. regular-expressions.info/reference.html 내장 문자 클래스에는 각각 기본 제공 보완 기능이 있습니다. \ d \ D (숫자 대 숫자 이외의 숫자) \ w \ W (단어 문자 대 단어 문자 이외의 문자) \ s \ S (공백 대 공백 이외의 문자)
csj

3
다음은 replace 구문입니다. w3schools.com/jsref/jsref_obj_regexp.asp 슬래시와 "g"는 RegEx의 일부가 아니라 해당 명령의 일부이기 때문입니다.
Mike K

않는 replace모든 브라우저에서이 정확한 구문과 함께 작업을? object has no method 'replace' jQuery로 잡은 텍스트와 함께 이것을 사용할 때 이전 버전의 IE를 사용하는 것을 기억하는 것 같습니다 ...
cwd

@cwd 과거 또는 현재 브라우저에서 어떤 기능이 지원되는지 잘 모릅니다. 이 질문은 DOM이 아닌 컨텍스트를 지정 했으므로 포스터가 웹 브라우저가 아닌 환경에서 스크립팅되었을 수 있습니다.
csj

354

부동 소수점에 점을 남기기 위해 이것이 필요하다면 이것을 사용하십시오.

var s = "-12345.50 €".replace(/[^\d.-]/g, ''); // gives "-12345.50"

6
정규 표현식 전문가가 있습니까? 이것을 단일 점만 허용하는 방법 (매우 숫자와 관련됨). 감사!
Kasperi

1
무슨 소리 야? 입력 및 출력 예제 제공
max4ever

2
좋지 않음 : "aaa 2.9px of bbb.".replace(/[^\d.-]/g, '')2.9.숫자를 둘러 쌀 수있는 모든 문자열을 제거해야합니다.
vsync

2
@ max4ever 당신은 내 인생을 저장, 감사 처리 -(음수) 번호의 경우 :
판 카즈 Parkar을

4
@ Kasperi 아마 :parseFloat("-1234.5.50 €".replace(/[^\d.-]/g, ''))
A. Genedy


23

RegExp를 사용하여 숫자가 아닌 모든 문자 를 바꿀 수 있습니다 .

var myString = 'abc123.8<blah>';
myString = myString.replace(/[^\d]/g, ''); // 1238

22

다음과 같은 내용이 있습니다.

yourString = yourString.replace ( /[^0-9]/g, '' );

10
원래 질문에 대한 정확한 대답은 아니지만 소수점을 처리하는 버전입니다.yourString = yourString.replace ( /[^0-9.]/g, '' );
Maxim Mai


0

Angular / Ionic / VueJS에서 방금 간단한 방법을 찾았습니다.

stripNaN(txt: any) {
    return txt.toString().replace(/[^a-zA-Z0-9]/g, "");
}

보기에서의 사용법 :

<a [href]="'tel:'+stripNaN(single.meta['phone'])" [innerHTML]="stripNaN(single.meta['phone'])"></a>

0

불행히도 위의 답변 중 어느 것도 나를 위해 일하지 않았습니다.

$123,232,122.11(1232332122.11) 또는 USD 123,122.892(123122.892) 와 같은 문자열 또는 다른 통화 에서 통화 번호를 변환하려고했습니다.₹ 98,79,112.50 하여 소수점 포인터를 포함한 숫자 출력을 제공하려고했습니다.

다음과 같은 내 정규식을 만들어야했습니다.

str = str.match(/\d|\./g).join('');

0

숫자가 아닌 모든 문자를 제거하지만 소수점을 유지하고 숫자를 반환하는 짧은 기능 :

parseNum = str => +str.replace(/[^.\d]/g, '');
let str = 'a1b2c.d3e';
console.log(parseNum(str));


-5

우리는 2017 년에 이제 ES2016 을 사용할 수 있습니다

var a = 'abc123.8<blah>';
console.log([...a].filter( e => isFinite(e)).join(''));

또는

console.log([...'abc123.8<blah>'].filter( e => isFinite(e)).join(''));  

결과는

1238

12
이 작업을 수행하는 데 매우 비효율적 인 방법입니다.
djheru

여기서 비효율적이거나 나쁜 것은 무엇입니까?
블라디슬라프 코스 텐코

5
예비 메소드를 통해 문자열을 단일 문자 문자열의 배열로 변환 한 다음 각 배열 항목에서 JavaScript를 통해 필터 함수를 적용하여 새 문자열 배열을 리턴하여 해당 배열을 문자열로 다시 결합합니다. 정규식은 문자열을 가져와 문자열을 반환하며 처리는 기본 코드를 통해 수행됩니다.
ShortFuse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.