2011-01-18 15 views
0

all記号、句読点、ブロック要素、幾何学的形状およびこれらのような飾りを無効にする方法があります:正規表現:無効シンボル

✁✂✃✄✆✇✈✉✌✍✎✏は✐ ✑✒✓✔✕⟻⟼⟽⟾⟿⟻⟼⟽⟾⟿▚▛▜▝▞▟

、中国語などの他のすべての通常の言語の文字を使用可能にしながら、正規表現パターンでそれらのすべてを書き留めずに、アラビア語など。これらのような:

文化中国الجزيرةنت

私はjavascriptの検証機能を構築することだし、私の本当の問題は、私が使用できないことです。

[a-zA-Z0-9] 

を、これはあまりにも言語の多くだけでなく、記号を無視するため。

+0

正規表現タスクより文字ごとのフィルタタスクによく似ています。 – Cascabel

+1

あなたは理由を挙げることができますか?おそらくこのことについてもっと良い方法があります。 – greggreg

+0

正規表現はこの問題の解決策ではありません –

答えて

5

Unicode標準では、可能なすべての文字をcode chartsに分割しています。各コードチャートには関連する文字が含まれています。特定のクラスのクラスのみを除外(または含める)したい場合は、除外(または包含)の適切なリストを作成する必要があります。 Unicodeは大きいので、これはたくさんの作業になるかもしれません。

2

JavaScriptはUnicode Character Propertiesをサポートしていません。 Greg Hewgillが提案したように、Unicodeコードポイントによる範囲を除外することで最も近いでしょう。

/[\u2190-\u259F]/ 
1

JavaScriptの正規表現はネイティブのUnicodeをサポートしていません。

は例えば、数学記号下のすべての文字にマッチします。サーバーサイトで文字列を検証(またはサニタイズ)する方法、または非ネイティブ正規表現ライブラリを使用する方法。私はそれを一度も使ったことはありませんが、XRegExpはそのようなライブラリであり、Unicode Pluginを持っています。

1

Unicode Planesをご覧ください。プレーン0と2以外のすべてを除外したいと思うかもしれません。その後、多くのプレーン0をケースバイケースで除外しなければならないので、面倒です。

+0

残念ながら、ポスターを除外したいキャラクターは、基本的な多言語面(0)で利用できるので、遠くには行きません。 – JasonTrue

+0

@Jason:そういうわけで私は醜いと言いました。リンク先のページにはBMP内のコード範囲がリストされており、必要に応じてコードポイントのリストへのリンクもあります(例:http://en.wikipedia.org/wiki/C1_Controls_and_Latin-1_Supplement)。 .. – Christoph

2

これは正規表現の方言によって異なります。残念ながら、おそらくほとんどの既存のJavaScriptエンジンはUnicode文字クラスをサポートしていません。

(最近の)Perlや.Netのような正規表現エンジンでは、Unicode文字クラスを参照することができます。

\ p {L}:任意の言語の任意の種類の文字。 \ p {N}:任意の言語の任意の数字記号(思い出したように、インドとアラビア語とCJKの数字グリフを含む)。

ユニコードは合成グリフと分解グリフをサポートしているため、特定の複雑さに遭遇する可能性があります。つまり、分解されたフォームのみが存在すると、誤って一致パターンの一部の発音記号を除外し、タイプマークのこれを幾分緩和するには、kC正規化を使用して正規化された文字列(正しく構成された形式を持つ文字のみ)を使用します。 Unicodeをうまくサポートする環境では、通常、Unicode文字列をかなり簡単に正規化できる関数があります(少なくともJavaと.Netに当てはまります)。

を追加するように編集:あなたはこの道を始めました、またはいくつかの正気を取り戻すために、それを考えた場合、あなたはを試してみたいことがありUnicode Plugin for XRegExp(XRegExpへの依存性を取るために、あなたが必要となります)。

関連する問題