[javascript] 문자열에서 영숫자가 아닌 문자 제거

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

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’


답변

문제는 문자를 바꾸는 방법이 아니라 문자열을 입력하는 방법에 관한 것입니다.

그것은 백 슬래시 문자가 입력의 첫 번째 백 슬래시이다, 다른 사람은 제어 문자의 일부 \r, \b, \f\n.

이러한 백 슬래시는 별도의 문자가 아니라 단일 제어 문자를 작성하는 표기법의 일부이므로 별도로 제거 할 수 없습니다. 즉 \n, 두 개의 별도 문자가 아니므로 백 슬래시를 제거 할 수 없습니다 . 제어 문자 LF또는 줄 바꿈 을 쓰는 방식입니다 .

해당 입력을 원하는 출력으로 바꾸려면 각 제어 문자를 해당 문자로 바꾸어야합니다 (예 : 문자 \n를 문자 로 바꿉니다) n.

이 같은 문자 집합을 사용할 필요가 제어 문자를 교체하려면 [\r]같은 \r정규 표현식에서 특별한 의미를 갖습니다 :

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, '');

데모 : http://jsfiddle.net/SAp4W/


답변

이 정규식을 시도해 볼 수 있습니다.

value.replace(/[\W_-]/g, '');


답변

영숫자가 아닌 문자를 모두 제거하고 대문자를 유지하며 단어 사이에 공백을 유지합니다.

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


답변

사용할 수있는 예는 다음과 같습니다.

function removeNonAplhaNumeric(str){
    return str.replace(/[\W_]/g,"");
}

removeNonAplhaNumeric("0_0 (: /-\ :) 0-0");


답변

\\test\red\bob\fred\new문자열 을 원하면 모든 백 슬래시 ( \)를 이스케이프해야합니다 . \\test\\red\\bob\\fred\\new문자열 을 작성할 때 실제로 단일 백 슬래시가 포함됩니다. 이 문자열을 확실하게 인쇄 할 수 있습니다.
따라서 문자열의 백 슬래시가 이스케이프 처리 myString.replace(/\W/g,'')되면 정상적으로 작동합니다.