programing

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

newsource 2022. 9. 28. 00:11

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

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

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""

그러나 교체 regex에 의해 제거되기도 합니다.

현재 답변은 모두 별난 점이 있습니다.제가 생각해낼 수 있는 가장 좋은 것은 다음과 같습니다.

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

아랍 문자를 영어 문자와 함께 포함하려면 다음을 사용할 수 있습니다.

// Output: نصعربي
"ن$%^&*(ص ع___ربي".replace(/[^0-9a-z\u0600-\u06FF]/gi, '');

여기 사용할 수 있는 예가 있습니다.

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

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

영어 외에 다른 언어를 사용하는 경우 유니코드에서 상대 블록 범위를 추가해야 합니다.다음은 키릴 문자의 예입니다.

.replace(/[^0-9A-Za-z_\u0400-\u04FF]/gi, '')

하시면 됩니다.\p{L} ★★★★★★★★★★★★★★★★★」\p{Letter} 를 찾을 수 \d디지트를 찾습니다.

str.replace(/[^\p{L}\d]/gu, '')

^세트를 하려면: " " " 를 누릅니다.not \P{L} and not \d

플래그:

  • g (global)한 만큼
  • u (unicode) 시퀀스(Unicode 이스케이프 시퀀스 등)를합니다.\p{L}를 참조해 주세요.

예:

function removeNonAlphaNumeric (str) {
  return str.replace(/[^\p{L}\d]/gu, '')
}

sequences = [
  'asdé5kfjdk?',
  'uQjoFß^ßI$jI',
  '无论3如何?!',
  'фв@#ео1'
]

for (seq of sequences) {
  console.log(removeNonAlphaNumeric(seq))
}

이렇게 하면 영숫자가 아닌 문자가 모두 삭제되고 대소문자가 유지되며 단어 사이의 공백이 유지됩니다.

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

「」를 .\\test\red\bob\fred\newstring, "String", "String")를 .\을 쓸 때\\test\\red\\bob\\fred\\new문자열에 실제로 단일 백슬래시가 포함되어 있습니다.이치노
가 이스케이프된 myString.replace(/\W/g,'')정상적으로 동작합니다.

언급URL : https://stackoverflow.com/questions/9364400/remove-not-alphanumeric-characters-from-string