正規表現
半角文字列の判定として「/[^\x01-\x7E]/
」を使う。
[]
の中に含まれる先頭のキャレット^
は否定の意なので、
この場合はASCIIコードの「x01
~x7E
の範囲外の文字列」という意味になる。
これだけではカナは含まれないため、同様に「/[^\uFF65-\uFF9F]/
」。
これはUTF-16の「半角中黒(FF65
)~半濁点(FF9F
)の範囲外の文字列」となる。
String.prototype.match
String.prototype.match
は文字列から正規表現にマッチングした文字を配列で返す関数で、
マッチングするものが無ければnull
を返す。
value.match(/[\uFF65-\uFF9F]/gi)
のようにgフラグ(グローバルフラグ)をつければ
マッチングした文字全てを配列として返すが、
デフォルトでは最初にマッチングした文字のみを返却する。
つまり、「全角の文字」が入力文字列に含まれていた場合は要素のある配列が返され、
!
で評価を反転させることでfalse
となる。
逆に、「半角の文字」が含まれていた場合match()
はnullを返すので、
!
で評価を反転させることでtrue
となる。
function isHankaku(value){ return !value.match(/[^\x01-\x7E]/) || !value.match(/[^\uFF65-\uFF9F]/); } function isHankakuKana(value){ return !value.match(/[^\uFF65-\uFF9F]/); } console.log("---------------------------------------------"); console.log("isHankaku : "); console.log("あ : " + isHankaku("あ")); console.log("- : " + isHankaku("-")); console.log("ア : " + isHankaku("ア")); console.log("A : " + isHankaku("A")); console.log("あいうえオ : " + isHankaku("あいうえオ")); console.log("アイウエオ : " + isHankaku("アイウエオ")); console.log("---------------------------------------------"); console.log("isHankakuKana : "); console.log("あ : " + isHankakuKana("あ")); console.log("- : " + isHankakuKana("-")); console.log("ア : " + isHankakuKana("ア")); console.log("A : " + isHankakuKana("A")); console.log("あいうえオ : " + isHankakuKana("あいうえオ")); console.log("アイウエオ : " + isHankakuKana("アイウエオ")); console.log("---------------------------------------------"); // 結果 //--------------------------------------------- //isHankaku : //あ : false //- : true //ア : true //A : true //あいうえオ : false //アイウエオ : true //--------------------------------------------- //isHankakuKana : //あ : false //- : false //ア : true //A : false //あいうえオ : false //アイウエオ : true //---------------------------------------------