正規表現について
正規表現とは
入力フォームのバリデーションチェックなどで使用したり、全角の値を半角に変換したりするときに使われていますね。
今まで何度も使用してきましたが、詳しく調べたことはありませんでした。
正規表現で全角文字を表す ^ [^ -~。-゚] がなぜ全角文字を検出できるのか。
TypeScriptにてフロント開発中、バリデーションチェックを作成している際ふと気になりました。
正規表現は大抵[a-z]や[0-9]、[A-Z]など、検出する文字列が正規表現に含まれているのですが、
^[^ -~。-゚] には全角文字は含まれていません。
なのになぜ全角文字を表す正規表現なのでしょうか?
順番に見ていく。
「^」
まずは「^」についてですが、この部分が答えでした。
正規表現において[ ]内先頭にある ^は否定を表します。
つまり、「^」以降の内容と真逆になるわけですね。なので^[^ -~。-゚]には全角文字が含まれていないわけです。
[ -~」
続いて[ -~」の部分。こちらは
「半角スペース」- 「チルダ」となっています。
ASCII文字コード表 ( http://smilebasic.com/supplements/unicode02/ )
によると、半角スペース(U+0020)からチルダ(U+007E) 中には半角英数字も含まれます。
U+007Fであるバックスラッシュは取得していないようですね。
「。-゚」
こちらはまず「。」がUnicodeでU+FF61だそう。
参考
そして「゚」はU+FF9Fとのこと。
つまりU+FF61~U+FF9Fを指定しています。
この中に含まれている文字は 「 や゙ もありますが、メインは「半角カタカナ」でした。((ヲ)U+FF66 ~ (ン)U+FF9D)
まとめ
以上を全て踏まえたうえで ^[^ -~。-゚]を見ていきましょう。
順番に
「否定」「半角英数字」「半角記号」「半角カタカナ」
となっています。
つまり、半角英数字、半角記号、半角カタカナ以外を取得しているわけですね。
[a-z]のように全角文字のみ取得する方法はないのかかなり回りくどいやり方になっているように見えますが、正しく動作しているみたいです。
すっきりしました。
andmore...
他にもこんな記事書いてます。