문자열에서 모든 특수 문자를 제거하는 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,"");