正規表現を使い、文字列が平仮名か否かを判定します。
以下のように判定できることを目指します。
regex = /*ここに何らかの正規表現*/;
regex.test("あいうえお");
// -> true
regex.test("あぁ");
// -> true
regex.test("aiueo");
// -> false
regex.test("あいueo");
// -> false
regex.test("あい うえお");
// -> false
3つの方法を紹介します。
注意事項や、コメント欄もお読みください。
1. Unicodeプロパティを使う
これが最もスマートです。
現在では殆どの環境でUnicodeプロパティをサポートしているので、気にせず使えます。ええ時代や。
regex = /^[\p{scx=Hiragana}]+$/u;
↑だけであれば、[
]
は省略できます。
regex = /^\p{scx=Hiragana}+$/u;
ちなみに、この方法では鍵括弧や句読点にもマッチしてしまいます。
注意事項をご参照ください。
参考: UNICODE REGULAR EXPRESSIONS - Unicode® Technical Standard
2. Unicodeエスケープシーケンスを使う
Unicodeにおける平仮名の範囲はU+3041
-U+3093
ですので、以下のようになります。
regex = /^[\u3041-\u3093]+$/u;
3. 平仮名を使う
Shift-JISでもUTF-8でも、平仮名の範囲はぁ
-ん
ですので、そのまま[ぁ-ん]
とする方法です。
旧石器時代から使われています。直感的ですわぁ〜ん。
regex = /^[ぁ-ん]+$/u;
注意事項(@nanto_viさんのコメントより引用)
1. Unicodeプロパティを使う
のマッチングについて
また、\p{scx=Hiragana}だと鍵括弧や句読点にもマッチするので、用途によってはscx(Script_Extensionsプロパティ)ではなくsc(Scriptプロパティ)を使って[\p{sc=Hiragana}ー](「ひらがな」文字体系および長音符)くらいが適しているかもしれません。
2. Unicodeエスケープシーケンスを使う
および、
3. 平仮名を使う
のマッチングについて
また、[\u3041-\u3093]でも[ぁ-ん]でも「ゔ」などの文字が含まれないので、用途によってはそうした文字を含めるようにしてもよいかもしれません。
まとめ
Unicodeプロパティ最強。
scx=Katakana
とすればカタカナ
を指定できたりと、つよつよすぎてこれしか使えない体にされてしまいました。
しかし、現在でも3.
の方法で学ぶことが多いようです。
Unicodeプロパティの便利さが世に広がるといいな。
参考:
[正規表現] Unicode 文字プロパティ (01) -- 概要 - @hachi8833 さんの記事
JavaScriptで扱えるUnicodeプロパティ一覧 - @BlueSilverCat さんの記事
Special Thanks - 謝辞
順不同
@nanto_viさん
いただきましたコメントを参考に、記事の内容や、表現を一部編集させていただきました。
大変有益なコメント/ご指摘、ありがとうございます!
@jack-lowさん
タイポのご指摘ありがとうございます!