Zend_Validate-EmailAddress.xml 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 15103 -->
  4. <sect2 id="zend.validate.set.email_address">
  5. <title>メールアドレス</title>
  6. <para>
  7. <classname>Zend_Validate_EmailAddress</classname> は、メールアドレスの検証を行います。
  8. このバリデータは、まずメールアドレスを
  9. local-part @ hostname
  10. に分割し、メールアドレスやホスト名の仕様にあわせて検証します。
  11. </para>
  12. <para>
  13. <emphasis role="strong">基本的な使用法</emphasis>
  14. </para>
  15. <para>
  16. 基本的な使用法は、以下のようになります。
  17. <programlisting role="php"><![CDATA[
  18. $validator = new Zend_Validate_EmailAddress();
  19. if ($validator->isValid($email)) {
  20. // メールアドレスは正しい形式のようです
  21. } else {
  22. // 不正な形式なので、理由を表示します
  23. foreach ($validator->getMessages() as $message) {
  24. echo "$message\n";
  25. }
  26. }
  27. ]]>
  28. </programlisting>
  29. これは、メールアドレス <code>$email</code> を検証し、失敗した場合は
  30. その原因を表す便利なエラーメッセージを
  31. <code>$validator->getMessages()</code> で取得します。
  32. </para>
  33. <para>
  34. <emphasis role="strong">複雑なローカルパート</emphasis>
  35. </para>
  36. <para>
  37. <classname>Zend_Validate_EmailAddress</classname> は、メールアドレスの検証を
  38. RFC2822 にもとづいて行います。たとえば、妥当な形式のメールアドレスとしては
  39. <code>bob@domain.com</code>、<code>bob+jones@domain.us</code>、
  40. <code>"bob@jones"@domain.com</code> および <code>"bob jones"@domain.com</code>
  41. などがあります。
  42. </para>
  43. <para>
  44. かつて使われていたものの、現在は有効とはみなされないフォーマットもあります
  45. (たとえば、メールアドレスに改行文字や "\" を使用するなど)。
  46. </para>
  47. <para>
  48. <emphasis role="strong">さまざまな形式のホスト名の検証</emphasis>
  49. </para>
  50. <para>
  51. メールアドレスのホスト名部分の検証は、
  52. <link linkend="zend.validate.set.hostname"><classname>Zend_Validate_Hostname</classname></link>
  53. で行います。デフォルトでは、<code>domain.com</code>
  54. 形式の DNS ホスト名のみが有効となります。しかし、
  55. IP アドレスやローカルホスト名も有効にしたいこともあるでしょう。
  56. </para>
  57. <para>
  58. その場合は、<classname>Zend_Validate_EmailAddress</classname>
  59. のインスタンスを作成する際にパラメータを渡さなければなりません。
  60. このパラメータで、認めたいホスト名の形式を指定します。
  61. 詳細は <classname>Zend_Validate_Hostname</classname> を参照ください。
  62. たとえば DNS ホスト名およびローカルホスト名のどちらも許可するには、次のようにします。
  63. <programlisting role="php"><![CDATA[
  64. $validator = new Zend_Validate_EmailAddress(
  65. Zend_Validate_Hostname::ALLOW_DNS |
  66. Zend_Validate_Hostname::ALLOW_LOCAL);
  67. if ($validator->isValid($email)) {
  68. // メールアドレスは正しい形式のようです
  69. } else {
  70. // 不正な形式なので、理由を表示します
  71. foreach ($validator->getMessages() as $message) {
  72. echo "$message\n";
  73. }
  74. }
  75. ]]>
  76. </programlisting>
  77. </para>
  78. <para>
  79. <emphasis role="strong">そのホスト名が実際にメールを受け付けるかどうかのチェック</emphasis>
  80. </para>
  81. <para>
  82. ただ単にメールアドレスが正しい書式であるというだけでは、
  83. そのアドレスが実際に存在するかどうかはわかりません。
  84. この問題を解決するには、MX の検証を行います。
  85. メールアドレスのホスト名に対応する DNS レコードに、MX (メール)
  86. のエントリが存在するかどうかを調べるのです。
  87. これは、そのホストがメールを受け付けているかどうかを教えてはくれますが、
  88. そのメールアドレス自体が正しいものであるかどうかを知ることはできません。
  89. </para>
  90. <para>
  91. MX のチェックはデフォルトでは無効になっており、
  92. 現時点では UNIX プラットフォームでのみサポートしています。
  93. MX のチェックを有効にするには、<classname>Zend_Validate_EmailAddress</classname>
  94. コンストラクタの 2 番目のパラメータを渡します。
  95. <programlisting role="php"><![CDATA[
  96. $validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS,
  97. true);
  98. ]]>
  99. </programlisting>
  100. あるいは、<code>true</code> または <code>false</code> を
  101. <code>$validator->setValidateMx()</code> に渡すことで、
  102. MX の検証を有効あるいは無効にすることもできます。
  103. </para>
  104. <para>
  105. この設定を有効にすると、ネットワーク関数を用いて
  106. メールアドレスのホスト名部に対する MX レコードの存在チェックをします。
  107. これにより、スクリプトの処理速度が低下することに気をつけてください。
  108. </para>
  109. <para>
  110. <emphasis role="strong">国際化ドメイン名の検証</emphasis>
  111. </para>
  112. <para>
  113. <classname>Zend_Validate_EmailAddress</classname> は、ドメインの中に国際文字が使われている場合も処理できます。
  114. このようなドメインは、国際化ドメイン名 (International Domain Name: IDN)
  115. と呼ばれています。これはデフォルトで有効になっていますが、無効にすることも可能です。
  116. 無効にするには、<classname>Zend_Validate_EmailAddress</classname> が内部で保持している
  117. <classname>Zend_Validate_Hostname</classname> オブジェクトの設定を変更します。
  118. <programlisting role="php"><![CDATA[
  119. $validator->hostnameValidator->setValidateIdn(false);
  120. ]]>
  121. </programlisting>
  122. <code>setValidateIdn()</code> の詳細な使用法は、
  123. <classname>Zend_Validate_Hostname</classname> のドキュメントを参照ください。
  124. </para>
  125. <para>
  126. IDN の検証は、DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。
  127. </para>
  128. <para>
  129. <emphasis role="strong">トップレベルドメインの検証</emphasis>
  130. </para>
  131. <para>
  132. デフォルトでは、ホスト名の検証は既知の TLD の一覧に基づいて行われます。
  133. これはデフォルトで有効になっていますが、無効にすることもできます。無効にするには、
  134. 無効にするには、<classname>Zend_Validate_EmailAddress</classname> が内部で保持している
  135. <classname>Zend_Validate_Hostname</classname> オブジェクトの設定を変更します。
  136. <programlisting role="php"><![CDATA[
  137. $validator->hostnameValidator->setValidateTld(false);
  138. ]]>
  139. </programlisting>
  140. <code>setValidateTld()</code> の詳細な使用法は、
  141. <classname>Zend_Validate_Hostname</classname> のドキュメントを参照ください。
  142. </para>
  143. <para>
  144. TLD の検証は、DNS ホスト名の検証を有効にしている場合にのみ行われることに注意しましょう。
  145. </para>
  146. </sect2>
  147. <!--
  148. vim:se ts=4 sw=4 et:
  149. -->