2011-02-05 18 views
3

私はこれが間違った質問であることを知っていますが、私は何の結果もなしに2日間のグーグルで過ごしました。 ユーザがキリル文字とスペースだけを入力できるようにするには、どのようなregExpパターンが必要ですか? ありがとうございます!Javascript regExpキリル文字のパターン

+0

ユーザーを特定の文字に限定する理由はありますか? –

+0

@マッティ:これはとても良い質問です。通常、入力フィールドを10進数字 '\ p {Nd}'のみに制限するか、 '\ pN'だけ数値に制限するか、数学的数字' \ p {Math} 'のみに制限することが妥当な場合があります'\ pL'のアルファベットのみ、または' \ p {アルファベット} 'のアルファベットのみ、または**特に**すべての1つまたは2つのスクリプトまたは共通のタイプの文字のみです。これは、B≢B≢Вなどのセキュリティ上の落とし穴を回避します(U + 0042ラテン文字大文字B対U + 0392 GREEK大文字BETA対U + 0412 CYRILLIC CAPITAL LETTER VE)。しかし、難しいものもあります。 – tchrist

答えて

1

Javascriptでは、最も基本的なものでもLevel 1 Unicode supportを正規表現で提供していないため、Javascriptでこれを行うことはできません。これを正しく行うには、言語を切り替える必要があります。

これに列挙されたブロック範囲を使用することはできません。それはブロックやスクリプトを混乱させ、深刻な欠陥があります。 \p{Script=Cyrillic}プロパティを持つが、\p{Block=Cyrillic}プロパティを持たない150のコードポイントがあります。彼らは別のブロックにあります。時計:

$ unichars '\p{Script=Cyrillic}' '\P{Block=Cyrillic}' | wc -l 
150 

さらに、キリル文字ブロックには2つの非キリルコードポイントがあります。

あなたができるのは、文字クラスとして404キリル文字のコードポイントをすべて列挙することです。これは、非常に大きなものになる可能性があります。

$ unichars '\p{Script=Cyrillic}' | wc -l 
404 

the unichars scriptsを使用して、本当に必要なものをすべて一覧にすることができます。そこにいる間にthe uniprops scriptをつかむこともできます。

+0

OKをクリックします。どのように私はPHPでそれをテストすることができます。私はAJAXで試してみる。 –

+0

@Emil:PHPのpreg( "perl regex")関数を使うと、 '\ \ p {IsCyrillic}]のような文字クラスを使うことができるはずです。\ p {IsCyrillic} 'は' \ p {Script = Cyrillic} 'のエイリアスでなければなりません。他にもいくつかの言語がありますが、基本的には、これを正しく動作させるためにUnicodeスクリプトのプロパティをサポートする必要があります。ところで、 '\ p {IsCommon} 'を介してスクリプト型Commonの文字を許可することもできます。それらは空白を含む通常の句読点などです。私が言及した* uniprops *スクリプトは、コードポイントのすべてのプロパティをリストすることができます。 – tchrist

+0

@Emil: 'preg'パターンがPHPでどのように動作するかを知るために* pcrepattern * manページを読むと、PHPがリンクされているPCREライブラリがUnicodeサポートでビルド/コンパイルされていれば**サイト依存の場合)、PCREとPHPはスクリプトプロパティのショートカットエイリアスを使用するので、 '\ p {Cyrillic}'は '\ p {Script = Cyrillic}'の表現方法です。スクリプトのプロパティへのアクセスには、Perl 5.6以降、Ruby 1.9以降、またはJava 1.7以降を使用することもできます。 **注意:** '\ p {キリル文字}'は '\ p {ブロック=キリル文字}'ではなく、 '\ p {スクリプト=キリル文字}'ではないので、C#は使用できません。 – tchrist

関連する問題