「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
IE10のRegExpの不具合
Internet Explorer 10のJavaScriptで、正規表現(RegExp)の不具合を見つけましたので、紹介します。
RegExpオブジェクトには「rightContext」というプロパティがあります。
このプロパティは、マッチした部分より後の文字列を表すプロパティです。
例えば、以下のようにmatchメソッドを実行して、文字列「abc」の中から「aが1文字以上連続する部分」を探すとします。
この場合、「abc」の先頭の「a」がマッチしますので、RegExp.rightContextの値は「bc」になります。
'abc'.match(/a+/)
ここで、以下の正規表現を考えてみます。
これは、「a以外の文字が0文字以上連続する部分」にマッチさせる処理です。
'abc'.match(/[^a]*/)
「a以外の0文字以上の連続」には、空文字も含みます。
「a」の前にも空文字があると考えられますので、上記の正規表現は空文字にマッチします。
そして、RegExp.rightContextの値は「abc」になるはずです。
実際、Google Chrome/Firefox/Operaではその通りの結果が得られました。
ところが、Internet Explorer 10で上記の処理を行うと、「空文字にマッチする」という点は正しく動作したものの、RegExp.rightContextの値も空文字になってしまいました。
とりあえず、マイクロソフトの「Contact Us」のページでこの不具合を報告してみました。
不具合が修正されることを望みます。