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.