JavaScriptの文字列には指定した正規表現で文字列のマッチングを行うmatchメソッドが用意されている。
例えば時刻のフォーマットのチェックを行うには次のようにすることができる
また、オプション"g"を指定することで、最初にマッチした部分に加え、2番目、3番目...にマッチした部分も配列として返すこともできる。
また、上の例ではfor-in構文を使って配列の中身を列挙できるはずなのだが、FireFoxでは12,23,43と期待した通りに表示されるのだがIEだと変な値まで表示されるようになる。
ちなみに、次の構文だとIEでも12,23,43表示される。どうやら、IEではmatchで返却される配列中身を走査するときfor-in構文とfor(;;)構文とでは挙動が変わってしまうらしい。
*googleで"javascript for in"で検索したら、次のサイトが見つかった
"これは凶悪だっっっ! JavaScriptの"for~in"構文の罠"
IEだけでなく、他のブラウザもどうやらfor-inの構文の挙動はC#やjavaのものとは違った動作をするようですね・・・・。
FireFoxも昔の1.07のバージョンでは変な動きをするようですが・・・・
ちなみに、今私の使っているFireFox1.5はC#やJavaと同じ動きをするようです
例えば時刻のフォーマットのチェックを行うには次のようにすることができる
//"true"が表示される alert( "12:23:43".match(/[12]+d:[0-5]d:[0-5]d/))
また、オプション"g"を指定することで、最初にマッチした部分に加え、2番目、3番目...にマッチした部分も配列として返すこともできる。
//12時23分43秒と表示される var collection = "12:23:43".match(/d+/g); alert(collection[0]+"時"+collection[1]+"分"+collection[2]+"秒");
また、上の例ではfor-in構文を使って配列の中身を列挙できる
//画面に12,23,43と表示される・・・はず? for(var i=0 in collection){ alert(collection[i]) }
ちなみに、次の構文だとIEでも12,23,43表示される。
//これはIEでも画面に12,23,43と表示される for(var i=0 i < collection.length;i++){
alert(collection[i]) }
*googleで"javascript for in"で検索したら、次のサイトが見つかった
"これは凶悪だっっっ! JavaScriptの"for~in"構文の罠"
IEだけでなく、他のブラウザもどうやらfor-inの構文の挙動はC#やjavaのものとは違った動作をするようですね・・・・。
FireFoxも昔の1.07のバージョンでは変な動きをするようですが・・・・
ちなみに、今私の使っているFireFox1.5はC#やJavaと同じ動きをするようです