タグ

正規表現とPHPに関するtohokuaikiのブックマーク (4)

  • 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

    正規表現によるバリデーション等で、完全一致を示す目的で ^ と $ を用いる方法が一般的ですが、正しくは \A と \z を用いる必要があります。Rubyの場合 ^ と $ を使って完全一致のバリデーションを行うと脆弱性が入りやすいワナとなります。PerlPHPの場合は、Ruby程ではありませんが不具合が生じるので \A と \z を使うようにしましょう。 はじめに 大垣さんのブログエントリ「PHPer向け、Ruby/Railsの落とし穴」には、Rubyの落とし穴として、完全一致検索の指定として、正規表現の ^ と $ を指定する例が、Ruby on Rails Security Guideからの引用として紹介されています。以下の正規表現は、XSS対策として、httpスキームあるいはhttpsスキームのURLのみを許可する正規表現のつもりです。 /^https?:\/\/[^\n]+$/

    tohokuaiki
    tohokuaiki 2014/04/10
    “正規表現のメタ文字 ^ と $ は「行」の先頭・末尾を指します。文字列の先頭と末尾を指定する場合は、\A と \z を使用します。”なるほどーー!!
  • 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ : 404 Blog Not Found

    2009年03月19日18:00 カテゴリLightweight Languages 「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ ああ、まただよ... かなり使えるPHPの正規表現まとめ - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜 正規表現って、プログラミング言語間の差が少ないサブ言語なのに、なぜ「PHP」がつくとダメ正規表現ばかり登場するのか。うんざりだ。 かなり使えるPHPの正規表現まとめ - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜メールアドレスは厳密にチェックしようとするとなかなか難しいのですが、簡単なチェックだったらこれでOKぽいですね。 /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$

    「PHP使いはもう正規表現をblogに書くな」と言わせないでくれ : 404 Blog Not Found
    tohokuaiki
    tohokuaiki 2009/03/19
    PHPerさんへ $regexp = '@^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&\'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$@';
  • Produce by Sieg: [Perl での正規表現]

    # 半角スペース $str = '\x20'; # 全角スペース $str = '(?:\xA1\xA1)'; # EUC-JP $str_sjis = '(?:\x81\x40)'; # SJIS # 全角数字 [0-9] $str = '(?:\xA3[\xB0-\xB9])'; # EUC-JP $str_sjis = '(?:\x82[\x4F-\x58])'; # SJIS # 全角大文字 [A-Z] $str = '(?:\xA3[\xC1-\xDA])'; # EUC-JP $str_sjis = '(?:\x82[\x60-\x79])'; # SJIS # 全角小文字 [a-z] $str = '(?:\xA3[\xE1-\xFA])'; # EUC-JP $str_sjis = '(?:\x82[\x81-\x9A])'; # SJIS # 全角アルフ

  • phpでひらがな、カタカナの判別

    phpでマルチバイト(日語)の文字を判別にはmb_eregを使えば簡単なのですが、php4ではmb_eregはデフォルトでは使えず、phpのインストール時に「--enable-mbregex」としてconfigureしなければいけません。現状ではphp5がインストールされているサーバーや「--enable-mbregex」でconfigureされたphp4サーバーはまだ少ないので、mb_eregが使えない場合は、以下のようにpreg_match関数のPerl正規表現で文字コードを判別します。Perlプログラマでしたらおなじみですね。 他のWebサイトではmb_eregを使った例ばかりなので、今更ではありますが、参考までにpreg_matchでの例を記述してみます。 後述のサンプルスクリプトで使用する変数は以下です。文字コードはEUC-JP。 <?php $str1 = mb_conver

  • 1