Zend_Validate-EmailAddress.xml 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <sect2 id="zend.validate.set.email_addresses">
  2. <title> Email 地址</title>
  3. <para>
  4. <code>Zend_Validate_EmailAddress</code>允许你校验一个email地址。首先校验器把email地址分成local-part和@hostname并试图按照email地址和主机名的规范来匹配它。
  5. </para>
  6. <para>
  7. <emphasis role="strong">基本用法</emphasis>
  8. </para>
  9. <para>
  10. 一个基本用法的例子如下:
  11. <programlisting role="php"><![CDATA[
  12. $validator = new Zend_Validate_EmailAddress();
  13. if ($validator->isValid($email)) {
  14. // email appears to be valid
  15. } else {
  16. // email is invalid; print the reasons
  17. foreach ($validator->getMessages() as $message) {
  18. echo "$message\n";
  19. }
  20. }
  21. ]]>
  22. </programlisting>
  23. 这个例子匹配email地址<code>$email</code>并在匹配失败的时候用<code>$validator->getMessages()</code>来获得有用的错误信息。
  24. </para>
  25. <para>
  26. <emphasis role="strong">复杂的local parts</emphasis>
  27. </para>
  28. <para>
  29. <code>Zend_Validate_EmailAddress</code>根据RFC2822来匹配任何有效的email地址。例如,有效的email地址包括<code>bob@domain.com</code>, <code>bob+jones@domain.us</code>, <code>"bob@jones"@domain.com</code> 和 <code>"bob jones"@domain.com</code>。一些过时的email格式目前不再校验(例如email地址中的回车符或"\"符)。
  30. </para>
  31. <para>
  32. <emphasis role="strong">校验不同类型的主机名</emphasis>
  33. </para>
  34. <para>
  35. Email地址中的主机名部分依靠<link linkend="zend.validate.set.hostnames"><code>Zend_Validate_Hostname</code></link>来校验。尽管你希望IP地址和本地主机名也被接受,但缺省地只有像<code>domain.com</code>格式的DNS主机名被接受。
  36. 当然如果你想如愿,需要实例化<code>Zend_Validate_EmailAddress</code>并传递一个参数来指明哪种主机名你想接受。更多的细节包含在<code>Zend_Validate_Hostname</code>中。
  37. 下面的例子显示如何同时接受DNS和本地主机名:
  38. <programlisting role="php"><![CDATA[
  39. $validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS | Zend_Validate_Hostname::ALLOW_LOCAL);
  40. if ($validator->isValid($email)) {
  41. // email appears to be valid
  42. } else {
  43. // email is invalid; print the reasons
  44. foreach ($validator->getMessages() as $message) {
  45. echo "$message\n";
  46. }
  47. }
  48. ]]>
  49. </programlisting>
  50. </para>
  51. <para>
  52. <emphasis role="strong">检查主机名是否确实接受email</emphasis>
  53. </para>
  54. <para>
  55. email地址的格式正确并不意味着这个email地址确实存在。为解决这个问题,你可以用MX校验来检查一个MX(email)条目的主机名是否存在于DNS的纪录里。这将告诉你这个主机名接受email,但并不告诉你确切的email地址是有效的。
  56. </para>
  57. <para>
  58. MX 检查不是缺省地激活的,并且目前只支持UNIX平台。为激活MX检查,你可以传递第二个参数给<code>Zend_Validate_EmailAddress</code>构造器。
  59. <programlisting role="php"><![CDATA[
  60. $validator = new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS, true);
  61. ]]>
  62. </programlisting>
  63. 另外你可以传递 <code>true</code> 或 <code>false</code> 给<code>$validator->setValidateMx()</code> 来激活或禁止 MX 校验。
  64. </para>
  65. <para>
  66. 用激活这个设置的网络函数将用来为你所想校验的email地址的主机名中的MX记录的存在做检查。请注意这将可能把你的脚本变慢。
  67. </para>
  68. <para>
  69. <emphasis role="strong">校验国际域名</emphasis>
  70. </para>
  71. <para>
  72. <code>Zend_Validate_EmailAddress</code> 也将匹配存在于某些域名中的国际字符。这就是国际域名(IDN)支持。这个是缺省激活,你可以通过用存在于 <code>Zend_Validate_EmailAddress</code> 中的内部的 <code>Zend_Validate_Hostname</code> 对象来改变设置来禁止。
  73. <programlisting role="php"><![CDATA[
  74. $validator->hostnameValidator->setValidateIdn(false);
  75. ]]>
  76. </programlisting>
  77. 关于 <code>setValidateIdn()</code> 更多的信息在<code>Zend_Validate_Hostname</code> 文档中。
  78. </para>
  79. <para>
  80. 请注意你有你允许DNS 主机名被校验,国际域名(IDNs)才被校验。
  81. </para>
  82. <para>
  83. <emphasis role="strong">校验顶级域名</emphasis>
  84. </para>
  85. <para>
  86. 缺省地用已知的TLDs列表来检查主机名。你可以通过用存在于<code>Zend_Validate_EmailAddress</code> 中的内部的 <code>Zend_Validate_Hostname</code> 对象来改变设置来禁止。
  87. <programlisting role="php"><![CDATA[
  88. $validator->hostnameValidator->setValidateTld(false);
  89. ]]>
  90. </programlisting>
  91. 关于 <code>setValidateTld()</code> 更多的信息在<code>Zend_Validate_Hostname</code> 文档中。
  92. </para>
  93. <para>
  94. 请注意你有你允许DNS 主机名被校验,顶级域名(TLDs)才被校验。
  95. </para>
  96. </sect2>
  97. <!--
  98. vim:se ts=4 sw=4 et:
  99. -->