MW211 EXIT

devlog
正規表現/(行末以外の)$はエスケープ不要
2017年02月23日
行末の「$」は、末尾の時だけ行末の「$」となる。
つまり「$」の後ろに文字を続けると行末の「$」でなくなる。
よって「\$」みたいなエスケープは不要(あってもよいけど)。
例)「abc$efg」の「$e」は、「\$e」でも「$e」でも検索可能

但し、行末の「$」は見分けが付かないのでやっぱりエスケープ必要。
例)「abc$」の「c$」は、「c\$」か「c\$$」か「c$$」かで検索可能
分類:正規表現
Apache/Apache2.4をIEで見るとレスポンスが悪い
2017年02月18日
【現象】
  Apache2.4でPHPを動作させているとたまにレスポンスが悪くなる。
【原因】
  IE(IE10/11)の場合、リクエストを投げるとそれに対するレスポンスはするが、
  それ以降のレスポンスが返らなくなる。
  Windows NT向けに最適化されたマルチプロセスモジュール(のバグ?)が原因。
【解決方法】
  原因を切ってしまう。
  Apache設定ファイル「extra/httpd-mpm.conf」の以下セクションに以下を追記する。
┌──────────────────────────────────────┐
│<IfModule mpm_winnt_module>                                                 │
│    AcceptFilter http none                                                  │
│    AcceptFilter https none                                                 │
│</IfModule>                                                                 │
└──────────────────────────────────────┘
  「httpd.conf」に追記してもいけるようだが
  マルチプロセッサモジュール(mpm)に起因する問題なので、こっちが適切か。
分類:Apache
JavaScript/正規表現の変数化
2017年02月16日
┌──────────────────────────────────────┐
│文字.match(/\d/)                                                            │
└──────────────────────────────────────┘
上記のような正規表現(一致判定)があった場合に、「\d」の部分を変数化する方法。

単純に以下みたいなのはダメ。(「/」で囲っているのは単なる文字列ではない)
┌──────────────────────────────────────┐
│var str = '\d';                                                             │
│文字.match(/ + str + /)                                                     │
└──────────────────────────────────────┘

下記のように正規表現オブジェクトにしてあげるのが正解。
┌──────────────────────────────────────┐
│var str = '\\d';                                                            │
│var reg = new RegExp(str);                                                  │
│文字.match(reg)                                                             │
└──────────────────────────────────────┘
ただし、注意すべきなのは「\」が(「/」で囲う場合はそのままでいいが)
文字列となると「\\」で表記しなければならない点。

代入後、(「str」を)を「\」→「\\」に置換すれば、意識しなくても済むかと思ったが
代入の時点で「\」が落ちてしまうので置換が効かない。
分類:JavaScript
PHP配列/添字配列を連想配列に変換
2017年02月14日
添字配列から、keyとvalueが同じ連想配列を生成するスマートな方法。
「array_combine()」を用いる。(第一引数がkeyに第二引数がvalueになる)
┌──────────────────────────────────────┐
│$a = [                                                  ┌────────┐│
│    'a',                                                │array(3) {      ││
│    'b',                                                │  ["a"]=>       ││
│    'c',                                                │  string(1) "a" ││
│];                                                      │  ["b"]=>       ││
│$aa = array_combine($a, $a);                            │  string(1) "b" ││
│var_dump($aa);  //──────────────────→│  ["c"]=>       ││
└────────────────────────────│  string(1) "c" │┘
                                                          │}               │
                                                          └────────┘
なお、添字配列内に重複したデータがあった場合には、
重複分は無視される(一つにまとめられる)。

もっと、他にスマートな方法がありそうだが。
分類:PHP配列
jQuery/追加直後にイベント発生
2017年02月13日
jQueryで「.append()」メソッドで追加した要素にイベントを仕込んでおいて
追加した直後に(初期表示のため)まず一回イベントを発生させる方法の例。
┌──────────────────────────────────────┐
│var newTd = $('<td>')                                                       │
│    .append($('<select>')                                                   │
│        .html(                                                              │
│            '<option value="0" selected="selected">-<\/option>'            │
│          + '<option value="1">○<\/option>'                                │
│          + '<option value="2">×<\/option>'                                │
│        )                                                                   │
│        .bind('change', function() {                                        │
│            if ($(this).val() == 0) {                                       │
│                $(this).closest('tr').css({'backgroundColor':'#C0C0C0'});   │
│            } else {                                                        │
│                $(this).closest('tr').css({'backgroundColor':'#FFFFFF'});   │
│            }                                                               │
│        })                                                                  │
│    );                                                                      │
│$('#tr').append(newTd);                                                     │
│newTd.ready(function() {                                                    │
│    $(this).change();                                                       │
│});                                                                         │
└──────────────────────────────────────┘
追加要素は非同期で追加が行われるためそれが完了した直後に(完了するまで待って)
イベントを実行させればよい。
待つためのものが「.ready()」メソッドである。
また、「.change()」メソッドを単独で実行すれば、
任意にchangeイベントを発生させることができる。
分類:jQuery
正規表現/括弧のネスト
2017年02月11日
括弧の最初から最後まで最短一致検索でヒットさせるには
以下のような正規表現を用いることになる。
┌──────────────────────────────────────┐
│\(.*?\)                                                                     │
└──────────────────────────────────────┘
しかし、ネストしていた場合(「(本日(晴))」みたいやつ)は全部をヒットできない。

一回までのネストなら以下の正規表現でヒットできる。
┌──────────────────────────────────────┐
│\(([^\(^\)]|(\([^\)]*\)))*\)                                                │
└──────────────────────────────────────┘
分類:正規表現
注意/switch-case文のdefault
2017年02月10日
switch-case文の「default:」は誤記があっても
コンパイルエラーでひっかからない。

「:」なので、通常のラベルとして普通に認識される。

「dafault:」とかでも気づかないことがあるので注意。
分類:注意
Word/表の列幅を固定する
2017年02月09日
表を選択すると、メニューバー(リボン)上に「表ツール」のメニューが(一時的に)追加され
その中の「レイアウト」から「自動調整」の「列の幅を固定する」を選択する。
分類:Word
端数処理後の復元
2017年02月08日
消費税8%の税込金額を税抜金額に変換する際、小数点以下の端数誤差が気になる。

ただ、税込金額を計算する時に端数処理をどうしていたかがわかれば
誤差なく復元が可能なようだ。

  (1) 四捨五入で税込金額を計算していた場合 → (除算後に商を)四捨五入すればOK
  (2) 切り上げで税込金額を計算していた場合 → (除算後に商を)切り捨てすればOK
  (3) 切り捨てで税込金額を計算していた場合 → (除算後に商を)切り上げすればOK

元の金額(税抜金額)を×1.08し、整数となるよう四捨五入する。
それ(税込金額)を÷1.08し、整数となるよう四捨五入する。
するとその結果(再計算した税抜金額)が元の金額と必ず一致する。
→Excelで「1~2097152」まで試してみたが全て一致した
  ┌──────────────────────────────────┐
  │7─(×1.08)→7.56─(四捨五入)→8─(÷1.08)→7.40─(四捨五入)→7(=7)│
  └──────────────────────────────────┘
逆のケース(割ってから掛ける)だと、復元できないものがすぐみつかるのにだ。
  ┌──────────────────────────────────┐
  │7─(÷1.08)→6.48─(四捨五入)→6─(×1.08)→6.48─(四捨五入)→6(≠7)│
  └──────────────────────────────────┘

何か数学的法則性があるのだろうか?
分類:【未解決】
jQuery/同期にする
2017年02月07日
jQueryでAjaxを非同期でなくする(同期にする)方法。
(同期の時点でAjax(Asynchronous)でないというツッコミはなしで)
┌─────────┬────────────────────────────┐
│同期にする        │$.ajaxSetup({async:false});                             │
├─────────┼────────────────────────────┤
│非同期にする(既定)│$.ajaxSetup({async:true});                              │
└─────────┴────────────────────────────┘
とにかく非同期であっちゃこっちゃ処理が動くのが嫌な場合、直列処理にできる。
分類:jQuery
前へ 1 次へ