2016-05-01 4 views
3

コードポイントがエリクシールの大文字であるかどうかを検出する必要があります。私は値が範囲65..90であるかどうかをチェックしようとしましたが、これは非ラテンの大文字で失敗します。エリクシルでコードポイントが大文字であるかどうかを確認

String.upcase(cp) == cp

しかし、これは非文字(つまり数字、句読点)に失敗した場合、私はまた、チェックしようとしています。

私は本当にユニコードの全体を調べ、大文字のコードポイントのリストを作成したくないのですが、そこには組み込み関数がありますか?

<< *CODEPOINT* :: utf8 >> != String.downcase(<< *CODEPOINT* :: utf8 >>) 

がより良い方法は多分ですが、それはスタートだ:

答えて

9

あなたは任意の大文字を一致させる\p{Lu} Unicode文字プロパティの正規表現のエスケープシーケンスを使用することができます。

iex(1)> "a" =~ ~r/^\p{Lu}$/u 
false 
iex(2)> "A" =~ ~r/^\p{Lu}$/u 
true 
iex(3)> "π" =~ ~r/^\p{Lu}$/u 
false 
iex(4)> "Π" =~ ~r/^\p{Lu}$/u 
true 
iex(5)> "!" =~ ~r/^\p{Lu}$/u 
false 

あなたが正規表現でUnicodeのマッチングをオンにするuフラグを渡していることを確認します。

サポートされているプロパティの詳細については、thisページを参照してください。ページの見出し「Unicode文字のプロパティ」を検索します。

+1

正規表現が非常に遅いことに注意してください。パターンマッチング。 [Elixir標準ライブラリにこのような機能を追加する提案](https://groups.google.com/forum/#!topic/elixir-lang-core/DU-_euhvVk0)が追加される可能性がありますUnicodeライブラリーはすでに非常に大きいので、別のHexパッケージに変換してください。 – Qqwy

+0

'\ A'と' \ z'ターミネータを使用するように修正してください。ありがとうございます。 – mudasobwa

1

私はあなたがこのようなものを使用することができると思います。

関連する問題