<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dominic Sayers &#187; phil haack</title>
	<atom:link href="http://blog.dominicsayers.com/tag/phil-haack/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.dominicsayers.com</link>
	<description></description>
	<lastBuildDate>Tue, 31 Aug 2010 09:12:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<atom:link rel='hub' href='http://blog.dominicsayers.com/?pushpress=hub'/>
		<item>
		<title>Email address validation 1.2</title>
		<link>http://blog.dominicsayers.com/2009/02/22/email-address-validation-12/</link>
		<comments>http://blog.dominicsayers.com/2009/02/22/email-address-validation-12/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 15:25:24 +0000</pubDate>
		<dc:creator>Dominic</dc:creator>
				<category><![CDATA[Email address validation]]></category>
		<category><![CDATA[Relevant to my work]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[address]]></category>
		<category><![CDATA[cal henderson]]></category>
		<category><![CDATA[dave child]]></category>
		<category><![CDATA[doug lovell]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[haacked]]></category>
		<category><![CDATA[iamcal]]></category>
		<category><![CDATA[ietf]]></category>
		<category><![CDATA[phil haack]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rfc]]></category>
		<category><![CDATA[rfc2821]]></category>
		<category><![CDATA[rfc2822]]></category>
		<category><![CDATA[rfc3696]]></category>
		<category><![CDATA[rfc822]]></category>
		<category><![CDATA[simon slick]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://blog.dominicsayers.com/?p=399</guid>
		<description><![CDATA[I've also updated my own routine so that it still passes all the tests, of which there are now 158. As always, the full analysis is on my website and the latest version of the source code will always be in Google Code.]]></description>
			<content:encoded><![CDATA[<h4>Quick links: <a href="http://code.google.com/p/isemail/source/browse/#svn/trunk" target="_blank">Source code</a> | <a href="http://www.dominicsayers.com/isemail/" target="_blank">Email address validators head-to-head</a></h4>
<p>I had some very helpful input from Cal Henderson on interpreting RFC 2822. I&#8217;ve included his latest validator in my head-to-head comparison and updated the test suite to reflect the consensus from our discussion.</p>
<p>I&#8217;ve also updated my own routine so that it still passes all the tests, of which there are now 158. As always, the <a href="http://www.dominicsayers.com/isemail/" target="_blank">full analysis</a> is on my website and the <a href="http://code.google.com/p/isemail/source/browse/trunk" target="_blank">latest version of the source code</a> will always be in Google Code.</p>
<p>I would really appreciate it if you find a valid address that fails my validator, or an invalid one that passes, if you would get in touch with me and let me know.</p>
<p>Here are the latest scores:</p>
<p>Dominic Sayers: <strong>100% validated correctly<br />
<span style="font-weight:normal;">Simon Slick: <strong>91</strong><strong>%</strong><br />
Cal Henderson: <strong>84</strong><strong>%<br />
</strong></span></strong>Phil Haack: <strong>80</strong><strong>%<br />
<span style="font-weight:normal;">Dave Child</span><span style="font-weight:normal;">: </span>79</strong><strong>%</strong> </p>
<p><strong><span style="font-weight:normal;">I know Cal is working on IPv6 validation so this may change soon.</span></strong></p>
<h4><strong></strong>RFC nerd notes</h4>
<p>There are two principle changes in this version.</p>
<p>Firstly, I now accept Dave Child and Cal Henderson&#8217;s opinion that a backslash can escape <em>anything</em> in a quoted string local element. However, it must escape something &#8211; it can&#8217;t be at the end of the string.</p>
<p>Secondly, if the string is <em>not</em> quoted then the local element must be a vanilla atom. You can&#8217;t escape individual characters unless the element is surrounded by double quotes.</p>
<p>By &#8220;local element&#8221; I mean a single component of a dot-delimited local part.</p>
<p>I&#8217;ve extracted the raw specification of a valid email address in BNF (<a href="http://en.wiktionary.org/wiki/Backus-Naur_form">Backus-Naur form</a>) from RFC 5322 and put it here: <a href="http://www.dominicsayers.com/isemail/isemail/RFC5322BNF.html">The BNF from RFC 5322 defining parts of a valid email address</a>. If you try to follow this in the RFC you end up going backwards and forwards and getting confused &#8211; it&#8217;s much easier to understand in the way I&#8217;ve laid it out.</p>
<h4>Quick links: <a href="http://code.google.com/p/isemail/source/browse/trunk" target="_blank">Source code</a> | <a href="http://www.dominicsayers.com/isemail/" target="_blank">Email address validators head-to-head</a></h4>
]]></content:encoded>
			<wfw:commentRss>http://blog.dominicsayers.com/2009/02/22/email-address-validation-12/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Email address validation 1.0</title>
		<link>http://blog.dominicsayers.com/2009/02/20/email-address-validation-10/</link>
		<comments>http://blog.dominicsayers.com/2009/02/20/email-address-validation-10/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 10:39:14 +0000</pubDate>
		<dc:creator>Dominic</dc:creator>
				<category><![CDATA[Email address validation]]></category>
		<category><![CDATA[Relevant to my work]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[address]]></category>
		<category><![CDATA[cal henderson]]></category>
		<category><![CDATA[dave child]]></category>
		<category><![CDATA[doug lovell]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[haacked]]></category>
		<category><![CDATA[ietf]]></category>
		<category><![CDATA[phil haack]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rfc]]></category>
		<category><![CDATA[rfc2822]]></category>
		<category><![CDATA[rfc3696]]></category>
		<category><![CDATA[rfc822]]></category>
		<category><![CDATA[simon slick]]></category>
		<category><![CDATA[smtp]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://blog.dominicsayers.com/?p=384</guid>
		<description><![CDATA[I have now released version 1.0 of my PHP email address validator. This version passes all 139 unit tests in the suite - tests I have collated from RFC 3696 and from articles by Dave Child, Doug Lovell and Phil Haack. Plus some of my own to test the IPv6 address format.]]></description>
			<content:encoded><![CDATA[<h4>Quick links: <a href="http://code.google.com/p/isemail/source/browse/#svn/trunk" target="_blank">Source code</a> | <a href="http://www.dominicsayers.com/isemail/" target="_blank">Email address validators head-to-head</a></h4>
<p>OK, after some correspondence with <a href="http://www.addedbytes.com/blog/email-address-validation-v2/" target="_blank">Dave Child</a> and <a href="http://code.iamcal.com/php/rfc822/" target="_blank">Cal Henderson</a> I have now released version 1.0 of my PHP email address validator.</p>
<p>This version passes all 139 unit tests in the suite &#8211; tests I have collated from <a href="http://www.apps.ietf.org/rfc/rfc3696.html" target="_blank">RFC 3696</a> and from articles by Dave Child, <a href="http://www.linuxjournal.com/article/9585" target="_blank">Doug Lovell</a> and <a href="http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx" target="_blank">Phil Haack</a> plus some of my own to test the IPv6 address format. The <a href="http://www.dominicsayers.com/isemail/" target="_blank">full analysis</a> is on my website and the <a href="http://code.google.com/p/isemail/source/browse/#svn/trunk" target="_blank">latest version of the source code</a> will always be in Google Code.</p>
<p>I would really appreciate it if you find a valid address that fails my validator, or an invalid one that passes, if you would get in touch with me and let me know.</p>
<p>Here are the scores on the doors:</p>
<p>Dominic Sayers: <strong>100% validated correctly</strong><br />
Simon Slick: <strong>86%</strong><br />
Dave Child: <strong>81%</strong><br />
Phil Haack: <strong>79%</strong><br />
Cal Henderson: <strong>71%</strong></p>
<p>For the RFC nerds, this version now correctly validates the obsolete local form of <em>word *(&#8220;.&#8221; word)</em>. In other words you can regard the local part of the address as a dot-delimited series of elements each of which can be separately quoted. This means that <em>first.&#8221;last&#8221;@example.com</em> is now recognised as a valid address.</p>
<h4>Quick links: <a href="http://code.google.com/p/isemail/source/browse/#svn/trunk" target="_blank">Source code</a> | <a href="http://www.dominicsayers.com/isemail/" target="_blank">Email address validators head-to-head</a></h4>
]]></content:encoded>
			<wfw:commentRss>http://blog.dominicsayers.com/2009/02/20/email-address-validation-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
