개발 공부/Javascript
모든 문자 포함하는 정규식(한글, 일본어, 중국어 모두 포함)
차정
2024. 2. 8. 14:18
모든 나라의 문자를 포함하는 정규식은 유니코드 문자클래스 L 을 통해 만들수있다.
const wordRegex = /^[\p{L}]+$/u;
function testRegex(regex, word) {
if(regex.test(word)) {
return `${regex} test ${word} => pass`
}
return `${regex} test ${word} => fail`
}
console.log(testRegex(wordRegex, 'project')) // pas
console.log(testRegex(wordRegex, '不客气')) // pass
console.log(testRegex(wordRegex, 'ただいま。')) //fail (。 이것이 문자가 아니므로 fail)
console.log(testRegex(wordRegex, '!')) // fail (느낌표는 문자가 아니므로 fail)
See the Pen regex {L} by JEONG (@cona) on CodePen.
위 예제에서 일본어에서 사용되는 고리점(kuten)은 별도로 추가해야한다.
이를 위해 정규식에 문장부호 P 와 공백 Z를 포함하도록 수정하면 아래와 같다.
const wordRegex = /^[\p{L}\p{P}\p{Z}]+$/u;
function testRegex(regex, word) {
if(regex.test(word)) {
return `${regex} test ${word} => pass`
}
return `${regex} test ${word} => fail`
}
console.log(testRegex(wordRegex, '私の家には「ポチ」という名前の犬がいます。')) //pass
console.log(testRegex(wordRegex, '我很累,我需要休息,我想要去旅游。'))//pass
console.log(testRegex(wordRegex, 'He said "Hello, world!"'))//pass
See the Pen regex {L} by JEONG (@cona) on CodePen.
다른 유니코드 정규식을 사용하려면 다음을 참고하자.
https://ko.javascript.info/regexp-unicode
유니코드: 'u' 플래그와 \p{...} 클래스
ko.javascript.info
다음은 주요 문자 범주와 각각의 하위 범주 목록입니다.
- 문자(Letter) L:
- 소문자(lowercase) Ll
- 조정(modifier) Lm
- 단어의 첫 글자를 대문자로(titlecase) Lt
- 대문자(uppercase) Lu
- 기타(other) Lo
- 숫자(Number) N:
- 10진수(decimal digit) Nd
- 문자(letter number) Nl
- 기타(other) No
- 문장 부호(Punctuation) P:
- 연결선(connector) Pc
- 대시(dash) Pd
- 처음 따옴표(initial quote) Pi
- 마지막 따옴표(final quote) Pf
- 열기(open) Ps
- 닫기(close) Pe
- 기타(other) Po
- 표시(Mark) M (강세 등):
- 간격 결합(spacing combining) Mc
- 묶음(enclosing) Me
- 비공백(non-spacing) Mn
- 기호(Symbol) S:
- 통화(currency) Sc
- 수정(modifier) Sk
- 수학(math) Sm
- 기타(other) So
- 구분 기호(Separator) Z:
- 줄(line) Zl
- 단락(paragraph) Zp
- 공백(space) Zs
- 기타(Other) C:
- 제어(control) Cc
- 형식(format) Cf
- 할당되지 않음(not assigned) Cn
- 사용자 지정(private use) Co
- 서로게이트(surrogate) Cs
예를 들어 소문자를 찾아야 한다면 \p{Ll}을, 문장 부호를 찾아야 한다면 \p{P}를 사용하는 식으로 검색할 수 있습니다.