2009-03-19

PHP使いは正規表現についてだけ間違っているわけじゃない

簡易チェックですと本文に言い訳が書いてあってもダメなんだってことが分かってない。(文字が目立つ目立たないは関係ない。)簡易チェックで意味がありませんと title に書いてないと検索した人を間違った情報に呼び寄せちゃうからダメってことが分かってない。正しい情報のように呼び寄せちゃう段階でダメなの。

はっきり言うけど、文字の装飾でどうにかなると思っているなら Web が分かってないよ。

で、実は解決策は簡単で title を

正規表現を使ってメールアドレスかどうか調べるフリをする

にしとけば ok. これで正しい情報を求めている人は寄ってこない。正しい情報なんか求めてないからとにかく簡単に動くコードを見せろやという人はやはり寄ってくるだろう。でもそういう人は目的がそもそも違うんだからいいの。


というかメールアドレスチェックになぜみんなそんな必死だ。

メールアドレスをチェックするシーンというのはいくつかパターンがあるけど、大別して

  • ユーザーの入力したアドレスにちゃんとメールが届かないと困る場合
  • ユーザーの入力したアドレスが間違っていてメールが届かなくてもそれは自己責任て言っちゃえる場合

の二つに分かれる。

前者なら実際にメールを送信して confirm させればいいだけで、別に正規表現で正確に判別できる必要はない。文字列上のチェックでは正しいメールアドレスかどうかは判別できても、実在するかどうかは分からない。1後者も同じで、メールが届いても届かなくてもいいんなら正確に判別できる必要がそもそもない。これが分かっていればバカな正規表現チェックなんかしない。

もう一つ、良心的で力の足りない開発者は正規表現を使った中途半端なチェックを「じゃあもうちょっと厳密にすればいいのかな」と浅はかに考えてしまう。こういう良心的で力の足りない開発者がいると

実在するメールアドレスを登録できない

というおかしな問題が起きる。実はこれがいちばんタチが悪い。

だから本当はこう指摘すべきなのだ。

メールアドレスを正規表現でチェックする手法そのものが間違いです。チェックできた気になるだけです。

と。

実際にはこんな簡単に割り切れないケースが出てくるのは百も承知よ。でもさ、バータリーがバータリーだって自覚できるようにリードしてあげるのが先輩の役目だろ? ダンコーガイやあっきーなが言いたいことはそういうことだよ。

なんでそういうことを思うかというと、

携帯電話会社仕様のメールアドレスチェック正規表現を JavaScript で作っているところが意外に多い

から。

これ、やめてね。迷惑だから。なんで迷惑なのかはもう上に書いてある。読んで分からなかったら Web 開発やめよう。それがみんなの幸せだ。

  1. もちろん confirm の仕組みを用意するのは単なる正規表現チェックよりも面倒くさい。 

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm