web-dev-qa-db-ja.com

C#の正規表現の外国語文字

C#コードでは、漢字" 中文ABC123"を渡そうとしています。

一般に"^[a-zA-Z0-9\s]+$"を使用して英数字を使用する場合、

"中文ABC123"に合格せず、正規表現の検証に失敗します。

C#には他にどのような式を追加する必要がありますか?

11
user2683269

任意の言語の任意の文字を一致させるには:

\p{L}

番号も一致させたい場合:

[\p{L}\p{Nd}]+

\p{L}...ユニコードカテゴリ文字の文字と一致します。
[\ p {Ll}\p {Lu}\p {Lt}\p {Lm}\p {Lo}]の短縮形です
\p{Ll}...小文字に一致します。 (abc)
\p{Lu}...大文字に一致します。 (ABC)
\p{Lt}...タイトルケースの文字と一致します。
\p{Lm}...修飾子文字に一致します。
\p{Lo}...大文字と小文字を区別しない文字に一致します。 (中文)

\p{Nd}...ユニコードカテゴリの10進数の文字と一致します。

置き換えるだけです:^[a-zA-Z0-9\s]+$^[\p{L}0-9\s]+$

25
Andie2302

それを行う正しい方法を指摘してくれた@ Andie2302に感謝します。

さらに、世界中の多くの言語では、それを生成するためにメイン文字を必要とする「追加文字」がまだあります(例:タイ語の「เก็บ」を\ p {L}のみ使用すると、「เกบ」のみが表示されます。いくつかのシンボリックがWordから欠落していることがわかります)。

だから\p{L}すべての外国語で機能するとは限りません。

したがって、ほとんど外国語をサポートするには、以下のコードを使用する必要があります

\p{L}\p{M}

注意:

Lは「文字」を表します(すべての言語からのすべての文字ですが、「マーク」は含まれません)

Mは「マーク」の略です(「マーク」は単独で表示することはできません。表示するには「文字」が必要です)

番号が必要なことに加えて、以下のコードを使用してください

\p{N}

注意:

Nは「数値」を表します


非常に有用な情報を提供してくれたこのウェブサイトに感謝します

https://www.regular-expressions.info/unicode.html

1
Sruit A.Suk