문자열에서 영숫자가 아닌 문자 제거
다음 문자열을 제공된 출력으로 변환하고 싶습니다.
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\new
string, "String", "String")를 .\
을 쓸 때\\test\\red\\bob\\fred\\new
문자열에 실제로 단일 백슬래시가 포함되어 있습니다.이치노
가 이스케이프된 myString.replace(/\W/g,'')
정상적으로 동작합니다.
언급URL : https://stackoverflow.com/questions/9364400/remove-not-alphanumeric-characters-from-string
'programing' 카테고리의 다른 글
현재 날짜/시간이 설정된 날짜/시간을 지났는지 어떻게 확인할 수 있나요? (0) | 2022.09.28 |
---|---|
두 번째 모드를 닫은 후 포커스가 잘못됨 (0) | 2022.09.28 |
Vue 라우터 링크: 형제 또는 자녀 관련 링크 (0) | 2022.09.28 |
Java NIO 파일 채널과 FileOutputstream의 퍼포먼스/유용성 비교 (0) | 2022.09.28 |
strr vs str_replace를 사용하는 경우 (0) | 2022.09.28 |