[javascript] RegExp로 모든 특수 문자 제거

문자열에서 모든 특수 문자를 제거하는 RegExp를 원합니다. 나는 이와 같은 것을 시도하고 있지만 IE7에서는 작동하지 않지만 Firefox에서는 작동합니다.

var specialChars = "!@#$^&%*()+=-[]\/{}|:<>?,.";

for (var i = 0; i < specialChars.length; i++) {
  stringToReplace = stringToReplace.replace(new RegExp("\\" + specialChars[i], "gi"), "");
}

RegExp에 대한 자세한 설명도 도움이 될 것입니다.



답변

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

의견에서 언급했듯이 허용 목록으로 사용하는 것이 더 쉽습니다 . 수신 허용 목록에 없는 문자를 바꾸십시오 .

캐럿 ( ^) 문자 세트의 부정이다 [...], gi라고 세계와 대소 문자를 구별 (후자는 약간의 중복하지만 난 그것을 언급하고 싶었)이 예에서는 수신 허용 목록은 숫자, 단어 문자, 밑줄 (이다 \w)와 공백 ( \s).


답변

슬래시 및 특수 문자와 같은 것을 포함하여 세트를 여전히 제외하려면 다음을 수행 할 수 있습니다.

var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');

“빼기”문자도 포함 시키려면 후자의 그룹과 같이 백 슬래시로 이스케이프 처리해야합니다. 그렇지 않으면 바람직하지 않은 0-9도 선택합니다.


답변

일반 Javascript 정규식은 유니 코드 문자를 처리하지 않습니다 .

를 사용하지 않으면 [^\w\s]키릴 문자 나 중국어는 말할 것도없고 악센트가있는 문자 (예 : èèìòù)가 제거되고 해당 언어에서 온 문자는 제거됩니다.

이 문자들을 모든 특수 문자와 함께 제거하고 싶지는 않습니다. 두 가지 기회가 있습니다.

  • 당신의 정규식에서 제거를하지 않는 모든 특수 문자를 추가
    예를 들면 다음과 같습니다 [^èéòàùì\w\s].
  • xregexp.com을 살펴 보십시오 . XRegExp는 \p{...}구문을 통해 유니 코드 일치에 대한 기본 지원을 추가 합니다.
var str = "Їжак::: résd,$%& adùf"
var search = XRegExp('([^?<first>\\pL ]+)');
var res = XRegExp.replace(str, search, '',"all");

console.log(res); // returns "Їжак::: resd,adf"
console.log(str.replace(/[^\w\s]/gi, '') ); // returns " rsd adf"
console.log(str.replace(/[^\wèéòàùì\s]/gi, '') ); // returns " résd adùf"
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.1.1/xregexp-all.js"></script>


답변

첫 번째 솔루션은 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).


답변

정규식을 디버깅하기 위해 RegexBuddy를 사용합니다. 거의 모든 언어가 매우 유용합니다. 대상 언어의 복사 / 붙여 넣기보다. 굉장한 도구이며 비용이 많이 들지 않습니다.

그래서 정규식을 복사 / 붙여 넣기하고 문제는 [,]가 정규식의 특수 문자이므로 이스케이프 처리해야합니다. 따라서 정규식은 /!@#$^&%*()+=-[\x5B\x5D]\/{}|:<>?,./im이어야합니다.


답변

왜 당신은 다음과 같은 일을하지 마십시오 :

re = /^[a-z0-9 ]$/i;
var isValid = re.test(yourInput);

입력에 특수 문자가 포함되어 있는지 확인


답변

str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "")나는 이렇게 했어요. 하지만 훨씬 쉬운 사람들이 있습니다str.replace(/\W_/g,"");