JavaScript + 유니 코드 정규식


216

JavaScript에서 유니 코드를 인식하는 정규식을 어떻게 사용합니까?

예를 들어, \w문자 또는 마크 범주 (ASCII의 문자가 아닌)의 코드 포인트와 일치 할 수 있고 구두점 등에 대한 [[P *]]와 같은 필터가 있어야합니다.


정규 표현식 지원은 포함되어 있지 않지만 유니 코드 관련 작업에 유용합니다. github.com/joelarson4/CharFunk
jwl

답변:


196

ES 6의 상황

다음 ECMAScript 언어 사양, 버전 6에는 유니 코드를 인식하는 정규식이 포함되어 있습니다. u정규식 에서 수정자를 사용하여 지원을 활성화해야합니다 . ES6의 유니 코드 인식 정규식을 참조하십시오 .

ES 6이 완성되고 브라우저 벤더들 사이에서 널리 채택 될 때까지는 여전히 자신이 있습니다. 업데이트 : 이제 ES6 유니 코드 정규식을 동등한 ES5로 변환 하는 regexpu라는 트랜스 파일러 가 있습니다. 빌드 프로세스의 일부로 사용할 수 있습니다. 온라인으로 사용해보십시오.

ES 5 이하의 상황

JavaScript는 유니 코드 문자열에서 작동하지만 유니 코드 인식 문자 클래스를 구현하지 않으며 POSIX 문자 클래스 또는 유니 코드 블록 / 하위 범위 개념이 없습니다.


4
이 마지막 도구는 블록에는 유용하지만 문자 나 숫자와 같은 많은 블록에 문자 유형이 흩어져있는 경우에는 거의 사용하지 않습니다. 참조 이 경우에 대해 유사한 접근 방식.
mgibsonbr

1
6to5traceur 는 유니 코드 작업을위한 플래그 및 기타 ES6 기능지원 합니다 . u
쓸모없는 코드

2
@UselessCode 그래, 바벨과 Traceur 사용 regexpu 종속성으로 그 transpile하는 u정규 표현식을.
Mathias Bynens 2016 년

1
\ pL과 같은 유니 코드 문자 클래스가 필요하고 이전 브라우저를 지원하는 경우 XRegExp 라이브러리 (소유권 A 플래그 참조)는 확실한 솔루션입니다. 감사!
BurninLeo

1
불행히도 온라인 번역기는 중국어 문자와 함께 \ w를 사용하여 작동하지 않았습니다. 번역하려고 "a品cd!e f".replace(/[^\w]/ug, "")했지만 결과 정규 표현식 (Chrome 59에서 실행)은 여전히 문자를 제거하고 다음 문자 만 반환합니다"acdef"
mwag

53

개인적으로, 나는이 기능을 얻기 위해 다른 라이브러리를 설치하지 않을 것입니다. 내 대답에는 외부 라이브러리가 필요하지 않으며 JavaScript 이외의 정규 표현식에 약간의 수정도 가능합니다.

유니 코드 웹 사이트 는 유니 코드 범주를 일련의 코드 포인트로 변환하는 방법을 제공합니다. 유니 코드 이므로 웹 사이트 정보가 정확해야합니다.

JavaScript는보다 작은 문자 만 처리 할 수 ​​있으므로 고급 문자를 제외해야합니다. FFFF 16 진수 . 인쇄 할 수없는 문자를 피하고 정규식의 크기를 최소화하는 것 사이의 균형을 유지하는 약어 콜레이트 및 이스케이프 확인란을 선택하는 것이 좋습니다.

다음은 다양한 유니 코드 속성의 일반적인 확장입니다.

\p{L} (편지) :

[A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]

\p{Nd} (숫자 10 진수) :

[0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19]

\p{P} (구두):

[!-#%-*,-/\:;?@\[-\]_\{\}\u00A1\u00A7\u00AB\u00B6\u00B7\u00BB\u00BF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]

이 페이지는 또한 \p{Hira}(일본어) 히라가나 문자 인와 같이 여러 모호한 문자 클래스를 인식합니다 .

[\u3041-\u3096\u309D-\u309F]

마지막으로, 하나 이상의 유니 코드 속성을 가진 char 클래스를 연결하여 정규 설정을 조합하여 얻는 것보다 짧은 정규 표현식을 얻을 수 있습니다 (특정 설정이 확인되는 한).


\p- 구문은 JS에서 작동하지 않는 것, /\p{L}/.test('a')입니다false
드미트리 Zaitsev

1
@DmitriZaitsev 물론 그렇지 않습니다. 아래에 나열된 "확장"을 사용해야합니다.
월계수

줄의 가로 스크롤 막대가 1/100 인 "확장"? 단위 테스트가있는 생산 코드에서? ;)
Dmitri Zaitsev

아마도 명확성을 향상시키기 위해 JS에서 작동하는 것과 작동하지 않는 것을 더 명확하게 언급 할 수 있습니다.
Dmitri Zaitsev

3
@DmitriZaitsev 여기에서 요점을 놓칠 수 있다고 생각합니다. 그는 JS에서 모두 작동하는 정규식 세트를 제공했습니다. 기본 기능이어야하는 것으로 대체 할 것이기 때문에 반드시 길어야합니다. 기본 기능을 어떻게 단위 테스트 하시겠습니까?
HeyHeyJC

49

또한 좋은 해결책을 찾지 못했지만 오래 전에 유니 코드 사양 (v.5.0.0) 에서 데이터를 다운로드 하고 BMP에서 각 유니 코드 범주 및 하위 범주에 대한 간격을 생성 하여 작은 스크립트를 작성했습니다 (최근 에 작은 것으로 대체 됨) 자체 고유 유니 코드 지원을 사용하는 Java 프로그램 ).

기본적으로 Tomalak이 언급 한 도구\p{...} 의 출력과 같이 다양한 값 으로 변환 되지만 간격은 블록을 다루지 않고 문자가 여러 곳에 흩어져 있기 때문에 상당히 커질 수 있습니다.

예를 들어 Regex는 다음과 같이 작성되었습니다.

var regex = unicode_hack(/\p{L}(\p{L}|\p{Nd})*/g);

다음과 같이 변환됩니다 :

/[\u0041-\u005a\u0061-\u007a...]([...]|[\u0030-\u0039\u0660-\u0669...])*/g

실제로 많이 사용하지는 않았지만 테스트에서 제대로 작동하는 것 같습니다. 그래서 누군가 유용하다고 생각하는 경우 여기에 게시하고 있습니다. 결과 정규 표현식의 길이에도 불구하고 (위의 예는 확장시 3591 자임 ) 성능은 허용 가능한 것 같습니다 ( jsFiddle 의 테스트 참조 , 개선 사항은 @modiX 및 @Lwangaman 덕분에).

여기 소스가 있습니다 (원시 27.5KB; 축소 , 24.9KB,별로 좋지는 않습니다 ...). 그것은 수도 그대로 그래서 나는 떠날거야, 유니 코드 문자를 언 이스케이프하여 작게 할 수 있지만, OTOH는 인코딩 문제의 위험을 실행합니다. ES6에서 이런 종류의 일은 더 이상 필요하지 않기를 바랍니다.

업데이트 : 이것은 Tim Down이 언급 한 XRegExp 유니 코드 플러그인 에서 채택 된 것과 동일한 전략처럼 보입니다 . 단,이 경우 일반 JavaScript 정규 표현식이 사용됩니다.


스크립트를 사용하여 문제를 해결 했지만 ( stackoverflow.com/questions/23391573/… ) 유니 코드 범위에는 대만, 중국어 또는 일본어 문자가 포함되어 있지 않습니다. 그래서 /^\p{L}+$/일치해야 東海林하지만 그렇지 않습니다. 컬렉션을 업데이트 할 때마다 알려주십시오. 고마워
Martin Braun

2
좋습니다. 간단합니다. 이 유니 코드 테이블을 사용하는 대만, 중국어 및 Japagnese : rikai.com/library/kanjitables/kanji_codes.unicode.shtml Katakana 테이블을 가져 왔을 때 간자 테이블 \p{Lo}이 모두 누락되었습니다.
마틴 브라운

@modiX 지적 해 주셔서 감사합니다! 스크립트를 업데이트했습니다. 이번에는 Java를 사용 하여 유니 코드 파일에서 스크랩하는 대신 목록생성했습니다 . 가능한 경우 SMP에 대한 지원도 추가 할 계획입니다.
mgibsonbr

고마워 유니 코드의 보충 다국어 평면을 살펴보면 할 일이 많이 있지만 아직 포함되지 않았다는 것을 알지 못했습니다. 현재 Java 프로그램에 추가 할 때 알려주십시오 (출력).
Martin Braun

1
JSFiddle 예제에서 추가했으며 ul 및 li이 올바르게 렌더링되도록했습니다. jsfiddle.net/Waxkc/49 여기에서 \ p {L &} 수정 자에 대한 참조를 찾을 수 있습니다 . regular-expressions.info/unicode . html 최근 대문자 또는 소문자 변형이 없으며 문자열을 적절하게 처리 할 수없는 비 유럽 언어의 문자를 식별하기 위해 최근 내 스크립트에서 사용하고 있습니다 (이 스크립트에서 수행 할 수있는 모든 문자열).
JohnRDOrazio

31

다른 답변에서 언급했듯이 JavaScript 정규 표현식은 유니 코드 문자 클래스를 지원하지 않습니다. 그러나 이것을 제공하는 라이브러리가 있습니다 : Steven Levithan의 탁월한 XRegExp유니 코드 플러그인 .


4
이 링크가 질문에 대답 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 할 수있는 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다. - 검토에서
mustaccio

3
@mustaccio : 동의하지 않습니다. 이 답변은 라이브러리 사용을 권장합니다. 라이브러리가 사라지면 라이브러리 문서의 스냅 샷을 복제하는 답은 라이브러리에 링크하는 것만 큼 쓸모가 없습니다.
Tim Down

21

[^\u0000-\u007F]+ ASCII 문자가 포함되지 않은 모든 문자

예를 들면 다음과 같습니다.

function isNonLatinCharacters(s) {
    return /[^\u0000-\u007F]/.test(s);
}

console.log(isNonLatinCharacters("身分"));// Japanese
console.log(isNonLatinCharacters("测试"));// Chinese
console.log(isNonLatinCharacters("حمید"));// Persian
console.log(isNonLatinCharacters("테스트"));// Korean
console.log(isNonLatinCharacters("परीक्षण"));// Hindi
console.log(isNonLatinCharacters("מִבְחָן"));// Hebrew

다음은 완벽한 참고 자료입니다.

유니 코드 범위 RegExp 생성기

유니 코드 정규식

유니 코드 10.0 문자 코드 차트

유니 코드 블록 범위 일치


이것을 허용하고 영어를 허용하는 방법?
Raz

20

2018 년 9 월 (2019 년 2 월 업데이트)

/\p{L}/u일치 문자에 대한 정규 표현식 ( 유니 코드 범주 )

  • Chrome 68.0.3440.106 및 Safari 에서 작동 11.1.2 (13605.3.8)
  • Firefox 65.0에서 작동하지 않습니다 :(

다음은 실제 예입니다

In below field you should be able to to type letters but not numbers<br>
<input type="text" name="field" onkeydown="return /\p{L}/u.test(event.key)" >

이 버그를 여기에 보고 합니다 .

최신 정보

1500035 > 1361876 > 1634135 에 따르면 2 년이 지난 후이 버그는 수정되어 Firefox v.78 +에서 사용할 수 있습니다.


9

이것은 그것을 할 것입니다 :

/[A-Za-z\u00C0-\u00FF ]+/.exec('hipopótamo maçã pólen ñ poção água língüa')

다양한 유니 코드 문자를 명시 적으로 선택합니다. 라틴 문자에서는 작동하지만 다른 이상한 문자는이 범위를 벗어날 수 있습니다.


이것은 잘 작동합니다. 왜 z가 없으면 작동하지 않습니까? 동일한 유니 코드 범위에 있지 않습니까?
Jens Törnell

여기에는 모든 범위의 라틴 유니 코드가 포함되지 않습니다. 더 사이에 있습니다 \u0100\u0280: 사람들의 대부분이 라틴 문자하지만 다른하지로 간주 될 수있다 : VAR의 = ''; 대한 (VAR 난에서 0xff = 나는 <=를 0x280; 내가 ++) {S + = 대신 String.fromCharCode (I)} "ÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏ ... ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗŞşŢţȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏɐɑɒɓɔɕɖɗɘəɚɛɜɝɞɟɠɡɢɣɤɥɦɧɨɩɪɫɬɭɮɯɰɱɲɳɴɵɶɷɸɹɺɻɼɽɾɿʀ"
데이비드 Avsajanishvili

8

JavaScript에서 \ w 및 \ d는 ASCII이고 \ s는 유니 코드입니다. 이유를 묻지 마십시오. JavaScript는 유니 코드 인식 \ w 및 \ d를 에뮬레이트하는 데 사용할 수있는 유니 코드 범주의 \ p를 지원합니다.

\ d의 경우 \ p {N} (숫자)를 사용하십시오.

\ w의 경우 [\ p {L} \ p {N} \ p {Pc} \ p {M}] (문자, 숫자, 밑줄, 마크)을 사용하십시오.

업데이트 : 불행히도, 나는 이것에 대해 틀렸다. JavaScript는 공식적으로 \ p도 지원하지 않지만 일부 구현에서는 여전히 이것을 지원할 수 있습니다. JavaScript 정규식에서 유일한 유니 코드 지원은 특정 코드 포인트를 \ uFFFF와 일치시키는 것입니다. 문자 클래스에서 범위의 것들을 사용할 수 있습니다.


26
왜? 왜 그렇게 많은 고통?
jeremy-george

노드 12에서 지원됩니다. 그러나 u 수정자를 추가해야합니다./\p{L}+/u
Ilya Semenov


4

이 질문에 답하고
있습니다. js의 regExp에서 \ p {Lu} 또는 \ p {Ll}에 해당하는 것은 무엇입니까?
현재 이전 질문과 정확히 중복 된 것으로 표시 되었기 때문입니다.

\ p {Lu}는 유니 코드 12 의 UCD 데이터베이스 를 쿼리하여 1,788 개의 코드 포인트를 생성합니다.

UTF-16으로 변환하면 클래스 구성 동등성이 생성됩니다.
4k 문자열 일 뿐이며 모든 정규식 엔진에서 쉽게 수행 할 수 있습니다.

(?:[\u0041-\u005A\u00C0-\u00D6\u00D8-\u00DE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178-\u0179\u017B\u017D\u0181-\u0182\u0184\u0186-\u0187\u0189-\u018B\u018E-\u0191\u0193-\u0194\u0196-\u0198\u019C-\u019D\u019F-\u01A0\u01A2\u01A4\u01A6-\u01A7\u01A9\u01AC\u01AE-\u01AF\u01B1-\u01B3\u01B5\u01B7-\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A-\u023B\u023D-\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E-\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9-\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0-\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E-\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D-\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uA7BA\uA7BC\uA7BE\uA7C2\uA7C4-\uA7C6\uFF21-\uFF3A]|(?:\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E-\uDC9F\uDCA2\uDCA5-\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]))

\ p {Ll}은 유니 코드 12의 UCD 데이터베이스를 쿼리하여 2,151 개의 코드 포인트를 생성합니다.

UTF-16으로 변환하면 클래스 구성 동등성이 생성됩니다.

(?:[\u0061-\u007A\u00B5\u00DF-\u00F6\u00F8-\u00FF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137-\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148-\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C-\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA-\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9-\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC-\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF-\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F-\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0-\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB-\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE-\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6-\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FC7\u1FD0-\u1FD3\u1FD6-\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6-\u1FF7\u210A\u210E-\u210F\u2113\u212F\u2134\u2139\u213C-\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65-\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73-\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3-\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7BB\uA7BD\uA7BF\uA7C3\uA7FA\uAB30-\uAB5A\uAB60-\uAB67\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A]|(?:\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]))

\ p {Lu} 또는 \ p {Pl}의 정규식 구현은 실제로
비표준 함수를 하여 값을 테스트합니다.

여기에 표시된 문자 클래스는 다르게 수행
되며 대부분 단일 클래스에 걸리면 선형, 표준 및 매우 느립니다.


정규식 엔진 (일반적으로)이 유니 코드 속성 클래스를 구현하는 방법에 대한 통찰력 :

속성
과 클래스 블록 간의 이러한 성능 특성을 검사하십시오 (위와 같이)

Regex1:  LONG CLASS 
< none >
Completed iterations:   50  /  50     ( x 1 )
Matches found per iteration:   1788
Elapsed Time:    0.73 s,   727.58 ms,   727584 µs
Matches per sec:   122,872


Regex2:   \p{Lu}
Options:  < ICU - none >
Completed iterations:   50  /  50     ( x 1 )
Matches found per iteration:   1788
Elapsed Time:    0.07 s,   65.32 ms,   65323 µs
Matches per sec:   1,368,583

와아 아 아아아!

속성이 어떻게 구현 될 수 있는지 보자

각 인덱스가 코드 포인트 인 포인터 배열 [10FFFF]

  • 배열의 각 포인터는 분류 구조에 대한 것입니다.

    • 분류 구조에는 고정 필드 요소가 포함됩니다.
      일부는 NULL이며 관련이 없습니다.
      일부는 카테고리 분류를 포함합니다.

      예 : 일반 범주
      64 비트 중 17 비트를 사용하는 비트 맵 요소입니다.
      이 Code Point가 지원하는 것은 마스크로 설정된 비트입니다.

      -Close_Punctuation
      -Connector_Punctuation
      ▪ 제어
      -Currency_Symbol
      -Dash_Punctuation
      -Decimal_Number
      -Enclosing_Mark
      -Final_Punctuation
      -format
      -Initial_Punctuation
      -Letter_Number
      -Line_Separator
      -Lowercase_Letter
      -Math_Symbol
      -Modifier_Letter
      -Modifier_Symbol
      -Nonspacing_Mark
      -Open_Punctuation
      -Other_Letter
      -Other_Number
      -Other_Punctuation
      -Other_Symbol
      -Paragraph_Separator
      -Private_Use -Titlecase_Letter 미 할당
      -Space_Separator
      -간격 _ 마크
      -대리


      대문자

정규식을 \ p {Lu}와 같은 구문으로 구문 분석
하면

  • 분류 구조 요소 오프셋 : 일반 카테고리
  • 비트 아이템에 대한 해당 요소의 점검 : 대문자 _ 문자

다른 예를 들어, 정규 표현식을 문장 부호 속성 \ p {P}로 구문 분석하면 다음과 같이
변환됩니다.

  • 분류 구조 요소 오프셋 : 일반 카테고리
  • 이러한 항목 비트에 대해 해당 요소를 확인하고 마스크에 결합합니다.

    -Close_Punctuation
    -Connector_Punctuation
    -Dash_Punctuation
    -Final_Punctuation
    -Initial_Punctuation
    -Open_Punctuation
    -Other_Punctuation

오프셋 및 비트 또는 비트 (마스크)는 해당 속성의 정규식 단계로 저장됩니다.

조회 테이블은이 배열을 사용하여 모든 유니 코드 코드 포인트에 대해 한 번 작성됩니다.

문자를 확인할 때 CP를이 배열에 대한 색인으로 사용하고 해당 비트 (마스크)에 대한 분류 구조의 특정 요소를 확인하는 것만 큼 간단합니다.

이 구조는 훨씬 더 복잡한 조회를 제공하기 위해 확장 가능하고 간접적입니다. 이것은 간단한 예일뿐입니다.


직접 검색을 문자 클래스 검색과 비교하십시오.

모든 클래스는 왼쪽에서 오른쪽으로 검색되는 항목의 선형 목록입니다.
이 비교에서 우리의 목표 문자열에 완전한 대문자 유니 코드 문자 만 포함되어 있으면 평균 법칙에 따라 클래스의 항목 중 절반이 범위를 검사하여 일치하는 항목을 찾아야한다고 예측합니다.

이것은 성능면에서 큰 단점입니다.

그러나 검색 테이블이 없거나 최신 유니 코드 릴리스 (이 날짜 기준 12 일)가 최신이 아닌 경우
경우 이것이 유일한 방법입니다.

실제로,
할당에 대한 특정 속성 (또는 추론)이 없기 때문에 전체 이모티콘 문자 를 얻는 유일한 방법 입니다.


매우 실망스러운 것은 다른 모든 언어가 그렇게 간단하게 만들기 위해이 모든 것을 거쳐야합니다.
nicolasassi

1
@nicolasassi-외관상 그렇게 간단하지 않습니다. 유니 코드 테이블 (및 속성)은 엔진의 광범위한 분포와 급격히 변화하는 표준 자체를 감안할 때 유지하기 어려울 것입니다. 게시물에 더 많은 통찰력을 추가했습니다.
x15

2

다음을 사용할 수도 있습니다.

function myFunction() {
  var str = "xq234"; 
  var allowChars = "^[a-zA-ZÀ-ÿ]+$";
  var res = str.match(allowChars);
  if(!str.match(allowChars)){
    res="true";
  }
  else {
    res="false";
  }
  document.getElementById("demo").innerHTML = res;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.