ペルシャ文字のみを受け入れるための正規表現
質問
あるフォームで、カスタムバリデーターがペルシャ文字しか受け付けないようにしています。 以下のコードを使用しました。
var myregex = new Regex(@"^[\u0600-\u06FF]+$");
if (myregex.IsMatch(mytextBox.Text))
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
しかし、ペルシア語の文字には対応していないため、アラビア語しか検出できないようです(گ,چ,پ,ژの4文字が欠落しています)。
この問題を解決する方法はありますか?
どのように解決するのですか?
TL;DR
ペルシャ語は以下のような文字セットが必須となります。
-
使用する
^[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی]+$
を使用するか、正規表現のフレーバーに応じたコードポイントを使用します(すべてのエンジンが\uXXXX
の表記をサポートしていないものもあります)。^[\u0622\u0627\u0628\u067E\u062A-\u062C\u0686\u062D-\u0632\u0698\u0633-\u063A\u0641\u0642\u06A9\u06AF\u0644-\u0648\u06CC]+$
-
使用方法
^[۰۱۲۳۴۵۶۷۸۹]+$
を使ってください。^[\u06F0-\u06F9]+$
-
使用方法
[ ٌ ًّ َ ِ ُ ْ ]
を使うか、正規表現にこだわります。[\u202C\u064B\u064C\u064E-\u0652]
といった具合に、組み合わせて使うこともできます。ハムザのような他のアラビア文字を追加することもできます。
ء
のような他のアラビア文字を文字セットに追加することもできます。
なぜ
[\u0600-\u06FF]
と
[آ-ی]
の両方が間違っているのでしょうか?
とはいえ
\u0600-\u06FF
が含まれます。
-
گ
コードポイント付き06AF
-
چ
コードポイント付き0686
-
پ
コードポイント付き067E
-
ژ
コードポイント付き0698
を示唆するすべての回答も
[\u0600-\u06FF]
または
[آ-ی]
は単純に間違っています。
すなわち
\u0600-\u06FF
には 209 のように、必要以上に多くの文字が含まれています!しかも数字も含まれています。
全文
この回答は、よくある誤解を修正するために存在します。コードポイント
0600
を通して
06FF
を表すものではありません。
ペルシャ語 / ペルシャ語アルファベット
(どちらも
[آ-ی]
):
[\u0600-\u0605 ؐ-ؚ\u061Cـ ۖ-\u06DD ۟-ۤ ۧ ۨ ۪-ۭ ً-ٕ ٟ ٖ-ٞ ٰ ، ؍ ٫ ٬ ؛ ؞ ؟ ۔ ٭ ٪ ؉ ؊ ؈ ؎ ؏
۞ ۩ ؆ ؇ ؋ ٠۰ ١۱ ٢۲ ٣۳ ٤۴ ٥۵ ٦۶ ٧۷ ٨۸ ٩۹ ءٴ۽ آ أ ٲ ٱ ؤ إ ٳ ئ ا ٵ ٮ ب ٻ پ ڀ
ة-ث ٹ ٺ ټ ٽ ٿ ج ڃ ڄ چ ڿ ڇ ح خ ځ ڂ څ د ذ ڈ-ڐ ۮ ر ز ڑ-ڙ ۯ س ش ښ-ڜ ۺ ص ض ڝ ڞ
ۻ ط ظ ڟ ع غ ڠ ۼ ف ڡ-ڦ ٯ ق ڧ ڨ ك ک-ڴ ػ ؼ ل ڵ-ڸ م۾ ن ں-ڽ ڹ ه ھ ہ-ۃ ۿ ەۀ وۥ ٶ
ۄ-ۇ ٷ ۈ-ۋ ۏ ى يۦ ٸ ی-ێ ې ۑ ؽ-ؿ ؠ ے ۓ \u061D]
255文字に該当するのは
アラビア語ブロック
(0600-06FF)の場合、ペルシャ語のアルファベットは32文字で、これにペルシャ語の数字のデモを加えると42文字になります。これに母音(もともとアラビア語の母音で、ペルシャ語ではほとんど使われない)を加えると
タンビン
(
ً
,
ٍِ
,
ٌ
) と
タシード
(
ّ
) は両方ともペルシャ語ではなくアラビア語の発音区分のサブセットであるため、46文字になってしまいます。つまり
\u0600-\u06FF
には必要な文字数より209文字も多く含まれていることになります!
۷
をコードポイントとして
06F7
はペルシャ語の数字表現で
7
であり
٧
をコードポイントとして
0667
は同じ数のアラビア語表現である。
۶
はペルシャ語の数字
6
であり
٦
は同じ数のアラビア語表現です。そして、すべて存在するのは
0600
を通して
06FF
のコードポイントがあります。
ペルシャ数字の4の形(
۴
), 5 (۵
)、および6個(۶
) は はアラビア語で使われる形とは異なり、他の数字はコードポイントが異なります。 コードポイントが異なります。
ペルシャ語には存在しない他の文字も見ることができ、ファーストネームや姓を検証する際に、誰もそれらを使いたがらないのです。
[آ-ی]
には117の文字が含まれていますが、これは検証のために必要な文字数よりもはるかに多いものです。これらの文字をすべて見るには
ユニコードCLDR
.
関連
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] URLのPath.Combineは?
-
[解決済み] HTMLで表示される上下の三角形(軸のない矢印)に使用できる文字は何ですか?
-
[解決済み] Regex 2つの文字列間のすべての文字にマッチする
-
[解決済み】アクセント記号付き文字(ダイアクリティック)の具体的なJavaScript正規表現について)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み] エンティティタイプ ApplicationUser は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】Unity3DでOnTriggerEnterが動作しない件
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する