忍者ブログ

スイーツ(笑)と呼ばないで!!

NEW ENTRY
10 2024/11 1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29 30 12

11/28/03:26  [PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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/
選べるフラグも限られているし完全ではありませんが、
基礎を学ぶには十分かと思います。

いつか正規表現にめっちゃくちゃ詳しくなったあなたが、
私のプロジェクトにアサインされる日を心待ちにしております。
(誰へのメッセージ?このブログ、読者いないけど 笑)

拍手[0回]

PR
URL
FONT COLOR
COMMENT
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
PASS

TRACKBACK

TRACKBACK-URL