[151164] in North American Network Operators' Group
Re: Programmers with network engineering skills
daemon@ATHENA.MIT.EDU (Owen DeLong)
Mon Mar 12 18:47:28 2012
From: Owen DeLong <owen@delong.com>
In-Reply-To: <4F5E740E.5040505@paulgraydon.co.uk>
Date: Mon, 12 Mar 2012 15:43:22 -0700
To: Paul Graydon <paul@paulgraydon.co.uk>
Cc: nanog@nanog.org
Errors-To: nanog-bounces+nanog.discuss=bloom-picayune.mit.edu@nanog.org
I think this proves one thing...
Given enough monkeys with typewriters, you will, in fact, not
get Shakespeare, but, instead, regular expressions for Shakespeare's
email address.
Owen
On Mar 12, 2012, at 3:09 PM, Paul Graydon wrote:
> On 03/12/2012 09:46 AM, Tei wrote:
>> On 12 March 2012 09:59, Carlos =
Martinez-Cagnazzo<carlosm3011@gmail.com> wrote:
>>> Hey!
>>>=20
>>> On 3/8/12 8:24 PM, Lamar Owen wrote:
>>>> On Monday, March 05, 2012 09:36:41 PM Jimmy Hess wrote:
>>>> ...
>>>>> (16) The default gateway's IP address is always 192.168.0.1
>>>>> (17) The user portion of E-mail addresses never contain special
>>>>> characters like "-" "+" "$" "~" "." ",", "[", "]"
>>> I've just had my ' xx AT cagnazzo.name' email address rejected by a =
web
>>> form saying that 'it is not a valid email address'. So I guess point
>>> (17) can be extended to say that 'no email address shall end in =
anything
>>> different that .com, .net or the local ccTLD'
>>>=20
>>> :=3D)
>>>=20
>>> Carlos
>>=20
>> Yea, I don't even know how programmers can get that wrong. The regex
>> is not even hard or anything.
>>=20
>>=20
>> =
(?:[a-z0-9!#$%&'*+/=3D?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=3D?^_`{|}~-]+)*|"(?=
:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x=
0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]=
*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|=
2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-=
\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
>>=20
>>=20
> It's supposedly a lot harder than that. Try this for strict RFC822 =
compliance (from http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html):
>=20
> (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[ \t]
> )+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ =
\t]))*"(?:(?:
> \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(
> ?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
> \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\0
> 31]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
> ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+
> (?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
> (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z
> |(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ =
\t]))*"(?:(?:\r\n)
> ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\
> r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
> \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)
> ?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t]
> )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[
> =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*
> )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[ \t]
> )+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*))*)
> *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[ \t])+
> |\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ =
\t]))*"(?:(?:\r
> \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:
> \r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
> ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031
> ]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
> ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?
> :(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
> :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?
> :(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
> [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ =
\t])*(?:(?:(?:[^()<>@,;:\\".\[\]
> \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
> \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ =
\t])*(?:[^()<>
> @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"
> (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ =
\t])*))*@(?:(?:\r\n)?[ \t]
> )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\
> ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ =
\t])*(?
> :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[
> \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*))*|(?:[^()<>@,;:\\".\[\] \000-
> \031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
> ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ =
\t])*(?:@(?:[^()<>@,;
> :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([
> ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ =
\t])*(?:[^()<>@,;:\\"
> .\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\
> ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ =
\t])*(?:[^()<>@,;:\\".\
> [\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
> r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ =
\t])*(?:[^()<>@,;:\\".\[\]
> \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
> |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ =
\t])*)?(?:[^()<>@,;:\\".\[\] \0
> 00-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
> .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ =
\t])*(?:[^()<>@,
> ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|"(?
> :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ =
\t])*))*@(?:(?:\r\n)?[ \t])*
> (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".
> \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ =
\t])*(?:[
> ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\]
> ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ =
\t])*)(?:,\s*(
> ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\
> ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ =
\t])*)(?:\.(?:(
> ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[
> \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ =
\t]))*"(?:(?:\r\n)?[ \t
> ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[ \t
> ])+|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*)(?
> :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|
> \Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*))*|(?:
> [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".\[\
> ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ =
\t])*)*\<(?:(?:\r\n)
> ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["
> ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*)(?:\.(?:(?:\r\n)
> ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>
> @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*))*(?:,@(?:(?:\r\n)?[
> \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,
> ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*)(?:\.(?:(?:\r\n)?[ \t]
> )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\
> ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ =
\t])*)?
> (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\["()<>@,;:\\".
> \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ =
\t])*)(?:\.(?:(?:
> \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z|(?=3D[\[
> "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ =
\t]))*"(?:(?:\r\n)?[ \t])
> *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] =
\000-\031]+(?:(?:(?:\r\n)?[ \t])
> +|\Z|(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*)(?:\
> .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ =
\t])+|\Z
> |(?=3D[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ =
\t])*))*\>(?:(
> ?:\r\n)?[ \t])*))*)?;\s*)
>=20
> Paul