IT story

문자열에서 영숫자가 아닌 문자를 제거하십시오.

hot-time 2020. 5. 8. 08:22
반응형

문자열에서 영숫자가 아닌 문자를 제거하십시오. [\] 문자에 문제가 있습니다


다음 문자열을 제공된 출력으로 변환하고 싶습니다.

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.

참고URL : https://stackoverflow.com/questions/9364400/remove-not-alphanumeric-characters-from-string-having-trouble-with-the-char

반응형