今回で最後の正規表現の記事になります。今回は、Emailアドレス、URI(URL)の正規表現と実は使ってはいけないメタ文字を書いていきたいと思います。8月14日記事
目次
これはすごい議論を呼びそうなので、ちょっと理由を説明してから正規表現を書いていきたいと思います。
まず、実際には次のような状況が起こっています。
引用ではありますが、このようになっています。
"/^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$/"
http://blog.livedoor.jp/dankogai/archives/51189905.html
"/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/"
"/^(https?|ftp)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/"
https?はhttpかhttpsは通すよという意味 これだと、http://localhost/とかは通るよね。そして、http:///www.google.co.jpも通しちゃうよね。
"/^(https?|ftp):[\/]{2}([-_.a-zA-Z0-9]+)([-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)$/"
三番目にくるスラッシュの文字や他の記号を制限しています。スラッシュ全部を制限してしまうとwww.google.co.jp/index.htmlを制限しちゃうことになってしまうから・・
「RFC3986定義の厳密なHTTP URIの正規表現」をPHP用に最適化
日本では有名なハッカー(クラッカーではないと思うけど)徳丸先生の記事では^と$は正規表現では使うべきではないとおっしゃっております。
衝撃..
このブログによれば、^は\A、$は\Zを使うべきであるとしています。
データ末尾に改行が含まれている場合を見逃してしまう
らしいのです。ということは改行の時のみ注意すればよいのでしょうか?一行のみは^や$がよさそうです。
正規表現勉強してると、あーこういう例外があるなぁや、これ通っちゃうなぁ等がでてくるのは当然だと思います。
そんな場合はフォローや指摘しあっていいものにしていきましょう。そういう心構えこそがインターネットとよく付き合う方法だと思います。これ通るよ!という方はコメントください
以上