谷口です。 今回はSymfonyのDateHelperとDateValidatorについて書きます。 DateHelperをtemplateで呼び出すには、input_date_tag関数を使います。 ただ、第3引数’rich=true’を指定するとcalendar widgetが出て日付を指定できますが、 誕生日などの入力には適していないと思います。 ‘rich=true’を指定しない場合の例を書きたいと思います。 ‘rich=true’を指定しないと、年月日のそれぞれがプルダウンメニューのインプットフォームになります。 例えば、下記のような感じです。 <?php echo input_date_tag( ELEMENT_NAME, DEFAULT_DATE, array('year_start' => MIN_YEAR, 'year_end' => MAX_YEA
次の案件がsymfony1.0ということで、久しぶりにsymfony1.0を触っています。 フォーム周りはまったくの別モノってぐらい違うのですが、やれば思い出すものです。 さて、symfony1.0でフォームにおいて日付のプルダウンをつくるとき、誰もが悩むであろう点があります。 それは、年、月、日のプルダウンを一括して出力するinput_date_tagという関数があるのですが、区切り文字は1つしか指定できないということです。 区切り文字が「/」だった場合は次のように表示されます。 決してユーザーに優しいUIではないですね。 日本的には [2009]年[03]月[29]日 のようにしたいところですがこれが簡単にできません。 というわけで、次に考えるのが区切り文字として空文字(NULL)を指定し、プルダウンの値に直接「年」や「月」を追加してしまう方法です。以下のようなプルダウンを作るわけです
2012年05月01日21:34 Ruby 正規表現で最短マッチを知っとくとちょっと便利かも 正規表現ってあるじゃないですか。そうです。アレです。 とっても便利で、いろんな場面で役立つと思うんですが、ときどき最短マッチを使いたくなって「最短マッチってどう書くんだっけなぁ?」ってなってググることがあります(よね!) 通常は最長マッチになる 通常、正規表現内で * とか + とか付けると、直前の表現の0回/1回以上の繰り返しを表しますが、この書き方だとできるだけ長い要素にマッチしようとします。大事なことなのでもう一度言います。できるだけ長い要素にマッチしようとするんです。 大抵はそれで構わないんですが、ときどきそれでは困るケースがあります。例えばこんなケースを考えてみましょう(あんまり良い例が思いつかない)。 ・"名前(ニックネーム)"という形式 ・名前と(ニックネーム)の間には半角or全角ス
最短マッチの意味自体はそんなに難しくない。まず最初に通常(最短マッチでない)の場合の説明。 <title>cloned.log</title>という箇所に対して <.*>というパターンを書いてしまうと <title>cloned.log</title> の全てがパターンにマッチしているとみなされる。途中で>が一度出現しているけれど、最後に出てきた>までが「一つのパターン」としてみなされる。 何が困るかというと、例えば上記の場合だとタグだけを引っ掛けたいときに困る。要は、 <title>cloned.log</title> としたいとき。ここで登場するのが最短マッチ。ここの例で言えば、<から始まって最初に>が出てくるまでを「一つのパターン」としてみなしたい訳だ。答えから書くと、 <.*?>となる。?が最短マッチのメタ文字。 ここまでだとそんなに難しくない印象なので、応用して、<a name=
「.*」や「.+」を使うと、限りなく連続した文字を表します。 これは非常に便利なのですが、予想以上に長くマッチして、思ったように動かないことがあります。 これを解決するためには「?」を付加して最短一致するように仕向ける方法があります。 また、ここで説明する「?」は「直前の文字の0回または1回に一致」とは違います。 文字は同じですが、まったくの別物です。(記述する位置で見分けてください。) たとえば、HTMLのタグを消す場合、このように書いたとします。(Perlの置換文法) s/<.+>//g これでタグは消えるのですが、タグだけではなく、タグに挟まれた間の文字まで消してしまいます。(下線部分) <P>abc</P> 理由は最長一致モードで動作しているからです。 動作をみると、途中に「>」が出てきているのですが、そこでは止まらず、最後の「>」までマッチしていま
<html> <div></div> <div class="content"> <b>内容<b/><br /> <img src="#" /> <p>ほげほげほげほげ</p> </div> <div></div> </html> 上のようなHTMLがあるとします。<div>の前後にもhtmlは書かれています。 そこから正規表現で<div class="content">~~~</div>の中身を取り出したいのですが、できません。 言語はPHPで、 /<div class=\"content\">.*<\/div>/ と書いてみたんですが、改行などがありうまくいきませんでした。 どのようにに記述すればうまくいくんでしょうか。
久しぶりに mbstring モジュール(特にマルチバイト正規表現)のソースコードを眺めていたのですが、いくつか面白い(知らなかった)挙動がありましたでメモしておきます。 確認した PHP のバージョンは 5.4.10 ですが、PHP 5.0 以降であれば、あまり変わりません。 パターン修飾子 m と s の解釈 これまでは Perl 互換の正規表現と同じと思っていたのですが、マルチバイト正規表現のパターン修飾子 m と s は Perl 互換の正規表現(preg)と挙動が違います。 mb_ereg_replace() と preg_replace() で、改行を含む文字列置き換えの結果を比較すると以下のようになります。 パターン修飾子 s(マルチバイト正規表現:ONIG_OPTION_SINGLELINE, Perl互換正規表現:PCRE_DOTALL) $ php -r 'echo m
正規表現をまとめてみる。 preg_match で使われる正規表現の書き方の前に まずは、 <検索対象文字列が1行か?それとも複数行か?> 文字列の中からパターンに合致する部分を探し出す場合、その文字列が1行(改行文字が1つ)なのか、複数行(改行文字が複数)なのかで、マッチ演算子を適切に指定。 preg_match("/パターン/", 調べる文字列); "/パターン/" //文字列の1行目のみを調べる "/パターン/g" //複数行を調べる "/パターン/s" //改行文字を無視し、1行とみなして調べる ついでに、 "/パターン/i" //文字列の大文字・小文字を区別しない "/パターン/is" //大文字・小文字を区別せず、1行とみなして調べる <基本> preg_match は、文字列中に現れた最初のパターンのみを検出。
Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く