[151164] in North American Network Operators' Group

home help back first fref pref prev next nref lref last post

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



home help back first fref pref prev next nref lref last post