문자열에서 영숫자가 아닌 문자를 제거하십시오. [\] 문자에 문제가 있습니다
다음 문자열을 제공된 출력으로 변환하고 싶습니다.
Input: "\\test\red\bob\fred\new"
Output: "testredbobfrednew"
내가 좋아하는 특수 문자를 처리 할 수있는 솔루션을 찾을 수없는 한 \r
, \n
, \b
, 등
기본적으로 나는 영숫자가 아닌 것을 제거하고 싶습니다. 여기 내가 시도한 것이 있습니다 ...
Attempt 1: "\\test\red\bob\fred\new".replace(/[_\W]+/g, "");
Output 1: "testedobredew"
Attempt 2: "\\test\red\bob\fred\new".replace(/['`~!@#$%^&*()_|+-=?;:'",.<>\{\}\[\]\\\/]/gi, "");
Output 2: "testedobred [newline] ew"
Attempt 3: "\\test\red\bob\fred\new".replace(/[^a-zA-Z0-9]/, "");
Output 3: "testedobred [newline] ew"
Attempt 4: "\\test\red\bob\fred\new".replace(/[^a-z0-9\s]/gi, '');
Output 4: "testedobred [newline] ew"
여러 단계로 다른 시도
function cleanID(id) {
id = id.toUpperCase();
id = id.replace( /\t/ , "T");
id = id.replace( /\n/ , "N");
id = id.replace( /\r/ , "R");
id = id.replace( /\b/ , "B");
id = id.replace( /\f/ , "F");
return id.replace( /[^a-zA-Z0-9]/ , "");
}
결과
Attempt 1: cleanID("\\test\red\bob\fred\new");
Output 1: "BTESTREDOBFREDNEW"
도움을 주시면 감사하겠습니다.
작업 솔루션 :
Final Attempt 1: return JSON.stringify("\\test\red\bob\fred\new").replace( /\W/g , '');
Output 1: "testredbobfrednew"
영숫자가 아닌 문자 제거
다음은 입력 문자열에서 영숫자가 아닌 문자를 제거하는 올바른 정규식입니다.
input.replace(/\W/g, '')
참고 \W
하는 것과 동일 [^0-9a-zA-Z_]
는 밑줄 문자를 포함 -. 밑줄을 제거하려면 다음을 사용하십시오.
input.replace(/[^0-9a-z]/gi, '')
입력이 잘못되었습니다
테스트 문자열에는 영숫자가 아닌 다양한 이스케이프 문자가 포함되어 있으므로 제거됩니다.
문자열의 백 슬래시는 문자 그대로 사용하려면 이스케이프해야합니다.
"\\test\\red\\bob\\fred\\new".replace(/\W/g, '')
"testredbobfrednew" // output
잘못된 문자열 처리
입력 문자열을 올바르게 이스케이프 할 수 없거나 (왜 안됩니까?) 신뢰할 수 없거나 잘못 구성된 소스에서 온 것입니다-다음과 같이 할 수 있습니다 :
JSON.stringify("\\test\red\bob\fred\new").replace(/\W/g, '')
"testredbobfrednew" // output
문자열의 json 표현에는 따옴표가 포함됩니다.
JSON.stringify("\\test\red\bob\fred\new")
""\\test\red\bob\fred\new""
그러나 대체 정규식에 의해 제거됩니다.
현재의 모든 답변에는 여전히 단점이 있습니다. 내가 생각해 낼 수있는 가장 좋은 것은 다음과 같습니다.
string.replace(/[^A-Za-z0-9]/g, '');
다음은 키보드에서 찾을 수있는 모든 키를 캡처하는 예입니다.
var string = '123abcABC-_*(!@#$%^&*()_-={}[]:\"<>,.?/~`';
var stripped = string.replace(/[^A-Za-z0-9]/g, '');
console.log(stripped);
출력 : '123abcABC'
문제는 문자를 바꾸는 방법이 아니라 문자열을 입력하는 방법에 관한 것입니다.
It's only the first backslash in the input that is a backslash character, the others are part of the control characters \r
, \b
, \f
and \n
.
As those backslashes are not separate characters, but part of the notation to write a single control characters, they can't be removed separately. I.e. you can't remove the backslash from \n
as it's not two separate characters, it's the way that you write the control character LF
, or line feed.
If you acutally want to turn that input into the desired output, you would need to replace each control character with the corresponding letter, e.g. replace the character \n
with the character n
.
To replace a control character you need to use a character set like [\r]
, as \r
has a special meaning in a regular expression:
var input = "\\test\red\bob\fred\new";
var output = input
.replace(/[\r]/g, 'r')
.replace(/[\b]/g, 'b')
.replace(/[\f]/g, 'f')
.replace(/[\n]/g, 'n')
.replace(/\\/g, '');
Demo: http://jsfiddle.net/SAp4W/
you can try this regex:
value.replace(/[\W_-]/g, '');
This removes all non-alphanumeric characters, preserves capitalization, and preserves spaces between words.
function alpha_numeric_filter (string) {
const alpha_numeric = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + ' ')
const json_string = JSON.stringify(string)
let filterd_string = ''
for (let i = 0; i < json_string.length; i++) {
let char = json_string[i]
let index = alpha_numeric.indexOf(char)
if (index > -1) {
filterd_string += alpha_numeric[index]
}
}
return filterd_string
}
const input = "\\test\red\bob\fred\new"
console.log(alpha_numeric_filter(input)) //=> testredbobfrednew
const complex_string = "/_&_This!&!! is!@#$% a%^&*() Sentence+=-[]{} 123:;\|\\]||~`/.,><"
console.log(alpha_numeric_filter(complex_string)) //=> This is a Sentence 123
If you want to have this \\test\red\bob\fred\new
string, you should escape all backslashes (\
). When you write \\test\\red\\bob\\fred\\new
your string actually contains single backslashes. You can be sure of this printing your string.
So if backslashes in your string are escaped myString.replace(/\W/g,'')
will work normally.
'IT story' 카테고리의 다른 글
SQL Server. (0) | 2020.05.08 |
---|---|
Objective-C 파일이 .m 확장자를 사용하는 이유는 무엇입니까? (0) | 2020.05.08 |
C #-키워드 사용 가상 + 재정의 vs. (0) | 2020.05.08 |
파이썬에서 임의의 부울을 얻습니까? (0) | 2020.05.08 |
offsetHeight, clientHeight, scrollHeight 란 무엇입니까? (0) | 2020.05.08 |