MW211 EXIT

devlog
PHP/「\」を「\\」に置換する方法
2012年04月07日
「\」(バックスラッシュ)は、PHPとしても、正規表現としても特殊な意味をもつので
その取扱いがややこしい。

結論からいうと、「preg_replace()」を使った場合、以下のような感じだ。
┌──────────────────────────────────────┐
│$置換後 = preg_replace('/\\\\/', '\\\\\\\\', $置換前);                      │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│(1) PHPとして、「'」で囲われた文字中の「\\」は「\」になる                   │
├──────────────────────────────────────┤
│(2) 正規表現として、文字としての「\」を表すのは「\\」(※)                   │
│    ※検索文字だけでなく置換後文字についても該当するので注意                │
└──────────────────────────────────────┘
よって「\」数の「1→2」を行いたい場合「1×4→2×4」=「4→8」となる。

ただ、(1)の原則は時に忘れられがちなので注意が必要だ。

例えば次の二つは同じ意味になるから、たいていは(a)を使う。
┌──────────────────────────────────────┐
│(a) $置換後 = preg_replace('/\d/', '_', $置換前);                           │
├──────────────────────────────────────┤
│(b) $置換後 = preg_replace('/\\d/', '_', $置換前);                          │
└──────────────────────────────────────┘

さきほどの(1)を補足するならば、以下のような感じだろうか。
┌──────────────────────────────────────┐
│(1) PHPとして、「'」で囲われた文字中の「\\」は「\」になる                   │
│    (が、端数の「\」は「\」になる)                                          │
└──────────────────────────────────────┘
#「\」の後続に続く文字によって挙動が変わるという言い方もある

結局のところ「\」自身を使う場面でなければ(1)の原則はあまり意識されない。
日頃から原則に従って(b)を使うように徹底すれば、なんてことはないのだが
突然「\」を使う段になって、(1)のような話に出くわすと結構焦る。
(a)もすべて(b)に置換しなきゃダメなのかという恐怖感に襲われたりして。

なので、(b)を徹底しないまでも(徹底する必要もないのかもしれないが)、
この考え方はしっかり覚えておくべきだろう。
分類:PHP
PostgreSQL/9.0と9.1の違い(2)
2012年04月06日
PostgreSQLの9.0と9.1では「standard_conforming_strings」の既定値が変更になった。
┌────┬─────────────────┐
│9.0以前 │standard_conforming_strings = off │
├────┼─────────────────┤
│9.1以降 │standard_conforming_strings = on  │
└────┴─────────────────┘

比較すると、こんな感じ。
┌────────┬───────┬───────┬───────┐
│                │ E''で囲った  │ 9.0以前(off) │ 9.1以降(on)  │
├────────┼───────┼───────┼───────┤
│特殊文字「\d」  │E'\\d'        │'\\d'         │'\d'          │
├────────┼───────┼───────┼───────┤
│「\」の一致     │= E'\\'       │= '\\'        │= '\'         │
├────────┼───────┼───────┼───────┤
│「\」のLIKE一致 │LIKE E'%\\\\%'│LIKE '%\\\\%' │LIKE '%\\%'   │
└────────┴───────┴───────┴───────┘

これまでは、常時「正規表現ですよ」という臨戦態勢だったのが、
これからは、「E''」で囲った時だけ特別に「正規表現ですよ」という風になった。

なお、PDOではこの設定値をみて、差異を吸収してくれるので
「standard_conforming_strings = on」状態のような感じで
値を指定してあげれば(「\」とかおおめに指定しなくてもよい、これまでもそう)、
よろしくやってくれる。
分類:PostgreSQL
PostgreSQL/9.0と9.1の違い(1)
2012年04月05日
PostgreSQLの9.0と9.1では「standard_conforming_strings」の既定値が変更になった。
┌────┬─────────────────┐
│9.0以前 │standard_conforming_strings = off │
├────┼─────────────────┤
│9.1以降 │standard_conforming_strings = on  │
└────┴─────────────────┘

エスケープ文字の扱いは以下のように違う。
┌──┬───┬───┬───┬───┐
│    │'     │"     │\     │\     │
├──┼───┼───┼───┼───┤
│off │'\''  │'"'   │'\\'  │E'\\' │
├──┼───┼───┼───┼───┤
│on  │''''  │'"'   │'\'   │E'\\' │
└──┴───┴───┴───┴───┘

よって、サニタイズの仕方も以下のように違ってくる。
┌───────┬───────┐
│ 9.0以前(off) │ 9.1以降(on)  │
├───────┼───────┤
│「'」→「\'」 │「'」→「''」 │
├───────┼───────┤
│「"」→「\"」 │  (そのまま)  │
├───────┼───────┤
│「\」→「\\」 │              │
└───────┴───────┘
分類:PostgreSQL
競馬オッズの注意点
2012年04月04日
単勝一番人気は「オッズが最小のもの」ではない。
一票も得票がない「0倍」が一番人気になってしまう危険性がある。

よって、「オッズが0倍を除く最小のもの」としなければならない。

「得票数が最大のもの」だと安全なのだが、
たいていはオッズの方のみが公開されてるものだ。
分類:注意、設計
jQuery/スタイル設定
2012年04月03日
例えば、color要素がこんな感じの場合。
┌──────────────────────────────────────┐
│<span style="color:black;">文字</span>                                      │
└──────────────────────────────────────┘

内容を確認する場合は以下。
┌──────────────────────────────────────┐
│$(this).css("color");                                                       │
└──────────────────────────────────────┘

設定する場合は以下。
┌──────────────────────────────────────┐
│$(this).css("color", "red");                                                │
└──────────────────────────────────────┘
分類:jQuery
jQuery/disabled属性の付与
2012年04月02日
disabledにする(無効にする)。
┌──────────────────────────────────────┐
│$(this).attr("disabled", "disabled");                                       │
└──────────────────────────────────────┘

disabledをはずす(有効にする)。
┌──────────────────────────────────────┐
│$(this).removeAttr("disabled");                                             │
└──────────────────────────────────────┘
分類:jQuery
jQuery/初期フォーカスをあてる
2012年04月01日
「id」が「初期フォーカス」の領域にフォーカスをあてる方法は以下の通り。
┌──────────────────────────────────────┐
│$("#初期フォーカス")[0].focus();                                            │
└──────────────────────────────────────┘

これを画面起動とともに実行してあげればよい。

ただし、その領域がないとエラーとなるので、
以下のように存在するのを確認してから実行するという手段も時には必要。
┌──────────────────────────────────────┐
│if ($("#初期フォーカス")[0]) {                                              │
│  $("#初期フォーカス")[0].focus();                                          │
│}                                                                           │
└──────────────────────────────────────┘
分類:jQuery
正規表現/否定の勘違い
2012年03月31日
否定、つまりその文字以外を該当させるのはこんな感じ。
「[^■]」

「a」でも「b」でもないってしたい場合は、この中に並べればよい。

「[^a^b]」
で、これは誤り。

「[^ab]」
が正解。

先頭に一回否定「^」を書けば、以降すべて否定の対象になる。

「^+検索対象文字」ではなく、「[^]」をセットとして覚えてしまおう。
分類:注意、正規表現
JavaScript/クリップボードへデバッグ
2012年03月30日
InternetExplorerにてJavaScriptの変数をクリップボードに出力する方法。
┌──────────────────────────────────────┐
│clipboardData.setData("Text", 変数);                                        │
└──────────────────────────────────────┘
処理を実行すると、クリップボードに変数の内容が出力されるので、
メモ帳などに「貼り付け」すると、その内容がテキストとして取得できる。
分類:JavaScript
PHP/全角トリム
2012年03月29日
┌──────────────────────────────────────┐
│trim($変数);                                                                │
└──────────────────────────────────────┘
PHPのトリム関数「trim()」は半角スペースしか除去してくれない。

全角スペースも除去したいのであれば、
以下のように正規表現をつかって除去してしまう方法がある。
┌──────────────────────────────────────┐
│preg_replace('/^[ △]+|[ △]+$/u', '', $変数);                              │
└──────────────────────────────────────┘
  ※△の部分は、全角スペースにしてください

正規表現の置換は処理が遅いらしいが、それほど気にならないかも。

あ、「trim()」はスペース以外にもタブとかも除去してくれるんだった。

ってことで、「trim()」の既定の除去対象文字を洗い出したところ以下の通り。
  「 」   …(0x20)半角スペース
  「\t」  …(0x09)タブ
  「\n」  …(0x0A)復帰(改行)
  「\r」  …(0x0D)改行
  「\0」  …(0x00)NULL
  「\x0B」…(0x0B)垂直タブ

なので、以下のようにすれば完璧!
┌──────────────────────────────────────┐
│preg_replace('/^[△ \t\n\r\0\x0B]+|[△ \t\n\r\0\x0B]+$/u', '', $変数);      │
└──────────────────────────────────────┘
分類:PHP
前へ 1 … 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 … 156 次へ