スイーツ(笑)と呼ばないで!!
| |||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||
11/28/03:26 [PR] |
05/13/07:49 validationと正規表現前回、urlやactive-urlのvalidation ruleを軽く紹介しながら、
「Validatorのソースを読もう!!」と呼びかけたわけだけれども、 ついでなので、emailのvalidation ruleについても触れておきます。 emailのvalidation ruleはソースを見ると内部的には filter_var($value, FILTER_VALIDATE_EMAIL) これを呼んでいる。 実はこの FILTER_VALIDATE_EMAIL はRFC 822の形式かどうかをチェックする。 ここで思い出さなきゃならないのは、ドコモが2009年3月までRFC違反でやっていた独自仕様だ。 ドットを複数回連続させることができたり、 アットマークの前にドットを使うことができたりする例のあれである。 完全に廃止されたわけではなく、新規登録では受け付けなくなった、というのが正確なところ。 よって、日本の6年以上前のドコモのメールアドレスを想定するなら、 このvalidation ruleではダメだということになる。 さて、ここまでくると、「なんだよ、laravelのvalidation使えねー」とか思うかもしれない。 でもそれは間違い。 alpha、array、in、numeric…….その他ほとんどのruleはそのまま使える。 ただ、一部のruleは注意が必要、というだけ。 例えば、前回のurlだって、webサイトの形式チェックしたいだけなら、その後に 「httpまたはhttpsで開始するか」 という正規表現を使ったvalidation ruleを追加すれば良い。 laravelにはregexという正規表現を使うためのvalidation ruleがある。 引数として正規表現をとれる。最強だ。 じゃ、どんな正規表現渡せば良いの?となるとやはりソースを読む。 preg_match($parameters[0], $value) という感じでpreg_matchに引数としてそのまま渡す感じ。 とすると、マルチバイトの時とかちゃんと考えないといけないですね。 末尾に「/u」つけたりとか。 ただ、たまに日本語とかマルチバイト文字例は「/u」と覚えている人いますが、 このuはUTF-8のuです。Shift-JISとかEUC-JPとかそのまま渡しちゃダメですね。 じゃ、mb_eregに渡してあげればうまくやってくれるかというと、 これ、内部的にはmb_regex_encodingで指定の文字エンコーディングを使用します。 この関数のchang logを見ると、 Changelog Version Description 5.6.0 Default encoding is changed to UTF-8. It was EUC-JP Previously. と書いてありますね。最新のPHP5.6ではデフォルトがEUC-JPからUTF-8に変更されています。 この辺はとってもとっても複雑ですねー。 私も正直勉強不足ですし、できれば専門のプログラマに任せたい領域です。 (だから、あまり私の言うこと信じないでくださいねー 笑) もし、あなたが駆け出しのPGで一芸に秀でて皆の役に立ちたいという志をもっているのなら、 この正規表現やvalidationの技術を極めてみてはいかがでしょうか? 私が新人の時には、その時点の先輩方の得意分野を考慮の上、先輩方が得意でない分野の1つを専門として担当しました。駆け出しの新人でもその分野については先輩方もプロフェッショナルとて敬意を表してくれますし、入社数ヶ月で何年も実務経験のある何百人もの前でその分野の講義をしたりもしたものです。 最後に、正規表現をいろいろ試せる便利なサイトを紹介して終わります。 http://www.regexr.com/ 選べるフラグも限られているし完全ではありませんが、 基礎を学ぶには十分かと思います。 いつか正規表現にめっちゃくちゃ詳しくなったあなたが、 私のプロジェクトにアサインされる日を心待ちにしております。 (誰へのメッセージ?このブログ、読者いないけど 笑) PR
|
|
|