javascript覚書 -正規表現の注意点
すごく基本的なことかもしれませんが。
Webシステムを作成していると、ユーザの入力内容が正しいかどうかをjavascriptでチェックしたい場面が結構でてきます。
そんなときは正規表現がすばらしく便利……なのですが、一歩間違えるとチェックが甘くなってしまうことが!
今回はそんなパターンの1つです。
○入力が全部数字かどうか!
半角数字のみの入力を許可したい!となったときに、条件反射的に以下のようにしてしまうことがあります。というか今回しました!
--------------------------------------------------------------------------
/** str:入力値 **/
function checkNumber(str) {
var message = '合格';
if(str.match(/[0-9]+/)){
message = '不合格';
}
return message;
}
--------------------------------------------------------------------------
さて、上記の機能ですが、「半角数字が1つ以上あること」を条件としたマッチングになってしまってます。
いけませんねーこれは。全然チェックになってません!
というのも、半角全角交じりの2文字以上(例:123あ)である場合に、その数値部分(例:123)がマッチしてしまうため、チェックに合格してしまうんですね。
入力値のすべてが数字である場合をチェックしたいならば、以下のように記述します。
--------------------------------------------------------------------------
/** str:入力値 **/
function checkNumber(str) {
var message = '合格';
var re = new RegExp('[0-9]{' + str.length + '}');
if(re.test(str)){
message = '不合格';
}
return message;
}
--------------------------------------------------------------------------
こちらの場合は、「半角数字が文字数分あること」が条件ですので、完全な数値チェックです。
入力値の文字数が定まっていない場合、入力値の一部分だけがマッチしてチェックが通ってしまうことが無いように注意が必要ですね。
この記事が気に入ったらサポートをしてみませんか?