JavaScript를 사용하여 문자열에서 공백을 제외한 모든 특수 문자를 제거하십시오.


157

JavaScript를 사용하여 문자열에서 공백을 제외한 모든 특수 문자를 제거하고 싶습니다.

예를 들어로 abc's test#s 출력해야합니다 abcs tests.


3
특별한 캐릭터를 어떻게 정의합니까?
Keith Irwin

답변:


348

단일 정규식과 함께 문자열 바꾸기 기능을 사용해야합니다. 특수 문자로 가정하면 문자가 아닌 것을 의미합니다. 여기에 해결책이 있습니다.

const str = "abc's test#s";
console.log(str.replace(/[^a-zA-Z ]/g, ""));


5
비 라틴 알파벳에서이 솔루션을 사용하려면 이 답변 을 확인하십시오
efkan

이것은 또한 숫자를 제거합니다!
tech_geek

15
@tech_geek 당신이 할 수있는str.replace(/[^a-zA-Z0-9]/g, "")
Chidi Williams

2
실제로이 str.replace(/[^a-zA-Z0-9 ]/g, "");통지가 필요합니다. 0-9와] 사이에 공백이 있습니다
Ammar Shah

약간의 조정이 필요합니다 ./ 또는-문자를 제거하지 않았으며 camelCase의 첫 문자는 소문자로 표시되지만 대문자로 표시됩니다.
Sansun

133

제거하려는 문자를 지정하여 수행 할 수 있습니다.

string = string.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, '');

또는 숫자와 문자를 제외한 모든 문자를 변경하려면 다음을 시도하십시오.

string = string.replace(/[^a-zA-Z0-9]/g, '');

4
이것을 사용하여 공간을 제거하고 싶지 않으면 어떻게해야합니까? /[^a-zA-Z0-9]/g
aadi1295

8
공간을 유지하려면 흰색으로 표시된 문자에 추가하십시오. 정규식은 것 "/ [^ A-ZA-Z0-9] / g」(통지 후 공백 9)
크리스티앙 라미

1
공간이 필요한 경우 이것이 효과가 있습니다.
Nathan Nathan

이 대체 ()whitespaces문자열.text().replace(/[ ()]/g, '')
C Alonso C Ortega

30

첫 번째 솔루션은 UTF-8 알파벳에는 작동하지 않습니다. (Привіт와 같은 텍스트를 잘라냅니다). RegExp를 사용하지 않고 JavaScript 엔진에서 우수한 UTF-8 지원을 사용하는 함수를 만들었습니다. 기호가 대문자와 소문자가 같으면 특수 문자입니다. 공백은 예외입니다.

function removeSpecials(str) {
    var lower = str.toLowerCase();
    var upper = str.toUpperCase();

    var res = "";
    for(var i=0; i<lower.length; ++i) {
        if(lower[i] != upper[i] || lower[i].trim() === '')
            res += str[i];
    }
    return res;
}

업데이트 : 이 솔루션은 대문자와 소문자가있는 언어에서만 작동합니다. 중국어와 같은 언어에서는 작동하지 않습니다.

업데이트 2 : 퍼지 검색을 할 때 원래 솔루션을 찾았습니다. 검색 기능을 구현하기 위해 특수 문자를 제거하려는 경우 더 나은 방법이 있습니다. 라틴 문자에서만 문자열을 생성 하는 음역 라이브러리 를 사용 하면 간단한 Regexp가 특수 문자를 제거하는 모든 마술을 수행합니다. (이것은 중국어에도 적용되며 Tromsø== 를 만들어 부수적 혜택을받을 수도 있습니다 Tromso).


이 독창적 인 솔루션에 감사드립니다. 많은 사람들이 "Привіт"또는 "æøå"특수 문자를 고려하지 않기 때문에 언어가 실제로 작동하는 방식과 훨씬 관련이 있습니다. 대부분의 솔루션은 영어 알파벳의 일부가 아닌 문자를 잘라냅니다.
Alex Langberg 12

1
나에게 거의 완벽한 대답이지만 불행히도 한자를 특수 문자로 간주합니다.
Eric Majerus

@EricMajerus와 힌디어도
프로그래머

또한 숫자를 특수 문자로 간주합니다.
just_user

11

JavaScript를 모르지만 정규식을 사용할 수 없습니까?

같은 [^\w\d\s]것은 숫자, 문자 및 공백 이외의 항목과 일치합니다. JavaScript에서 구문을 찾는 것은 단지 질문 일 것입니다.


1
stackoverflow.com/a/4374890/2384606 이것은 귀하의 질문에 대한 답변입니다 :)
Carmela

8

나는 Seagul의 매우 창의적인 솔루션을 시도했지만 숫자를 특수 문자로 취급하여 내 요구에 맞지 않는 것으로 나타났습니다. 여기에 Seagul의 솔루션에 대한 (실패한) 조정이 있습니다 ...

//return true if char is a number
function isNumber (text) {
  if(text) {
    var reg = new RegExp('[0-9]+$');
    return reg.test(text);
  }
  return false;
}

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

reg첫 번째 함수에서 선언 하는 것을 잊었습니다 .
Noman Ali

6

모두 검색하지 않음 (단어 문자 || 공백) :

str.replace(/[^\w ]/, '')

1

이것을 사용해보십시오

var result= stringToReplace.replace(/[^\w\s]/gi, '')

^ 캐럿은 부정에 사용되며 \ a는 [a-zA-Z0-9_] 단어 문자에, \ s는 공백에 대한 / s] / gi는 전역에 사용됩니다


0

점 (.)은 특수한 것으로 간주되지 않을 수 있습니다. Mozfet 's & Seagull의 답변에 OR 조건을 추가했습니다.

function isNumber (text) {
      reg = new RegExp('[0-9]+$');
      if(text) {
        return reg.test(text);
      }
      return false;
    }

function removeSpecial (text) {
  if(text) {
    var lower = text.toLowerCase();
    var upper = text.toUpperCase();
    var result = "";
    for(var i=0; i<lower.length; ++i) {
      if(isNumber(text[i]) || (lower[i] != upper[i]) || (lower[i].trim() === '') || (lower[i].trim() === '.')) {
        result += text[i];
      }
    }
    return result;
  }
  return '';
}

0

const input = `#if_1 $(PR_CONTRACT_END_DATE) == '23-09-2019' # 
Test27919<alerts@imimobile.com> #elseif_1 $(PR_CONTRACT_START_DATE) ==  '20-09-2019' #
Sender539<rama.sns@gmail.com> #elseif_1 $(PR_ACCOUNT_ID) == '1234' #
AdestraSID<hello@imimobile.co> #else_1#Test27919<alerts@imimobile.com>#endif_1#`;
const replaceString = input.split('$(').join('->').split(')').join('<-');


console.log(replaceString.match(/(?<=->).*?(?=<-)/g));


-11

문자열에서 제거하려는 특수 문자의 목록을 준비한 다음 사용자 javascript replace 함수를 사용하여 모든 특수 문자를 제거하십시오.

var str = 'abc'de#;:sfjkewr47239847duifyh';
alert(str.replace("'","").replace("#","").replace(";","").replace(":",""));

또는 전체 문자열에 대해 루프를 실행하고 단일 단일 문자를 ASCII 코드와 비교하고 새 문자열을 재생성 할 수 있습니다.


9
아뇨, 그러지 마세요 정말 느리다. 정규 표현식을 사용하는 것이 훨씬 좋습니다.
Keith Irwin

이 솔루션은 한 문자 만 바꾸는 데 매우 좋습니다. 제 경우에는 도움이되었습니다. 감사합니다.
Vahid Najafi

replace 메소드를 여러 번 사용하는 대신 정규식을 사용하여 한 번만 사용하십시오.
FAISAL
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.