W3C home > Mailing lists > Public > public-xformsusers@w3.org > June 2017

Re: Email type

From: Steven Pemberton <steven.pemberton@cwi.nl>
Date: Fri, 23 Jun 2017 21:12:54 +0200
To: "Erik Bruchez" <ebruchez@orbeon.com>
Cc: "public-xformsusers@w3.org" <public-xformsusers@w3.org>
Message-ID: <op.y2avnskqsmjzpq@steven-xps>
We define the email type as:

<xs:restriction base="xs:string">
       <xs:pattern  
value="([A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+(\.[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+)*
           @[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+(\.[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]+)*)?"/>
       </xs:restriction>
</xs:simpleType>

To help understand the above pattern, it can be split up as follows:
   char=[A-Za-z0-9!#-'\*\+\-/=\?\^_`\{-~]
   seg=char+
   segs=seg(.seg)*
   address=segs@segs
   email=address?

If we changed the last "*" in the regexp to a "+", it would require at  
least two 'seg's after the "@", thus allowing steven@cwi.nl, and not  
allowing steven@cwi

Steven


On Fri, 23 Jun 2017 18:48:46 +0200, Erik Bruchez <ebruchez@orbeon.com>  
wrote:

> Email validation is always wrong ;)
>
> We had a few issues with this in our implementation:
>
> - "Email validation is too lax" [1], which is exactly your scenario
> - "Email validation too strict on TLDs supported" [2]
>
> So instead of the regexp in the spec we now use the Apache email  
> validator [3] ("This implementation is not guaranteed to catch all  
> possible errors in an email address") and >then we do our own domain  
> validation:
>
>  // Modified email validator which:
>  //
>  // 1. Doesn't check whether a TLD is known, as there are two many of  
> those now (2015) and changing constantly.
>  // 2. Doesn't support IP addresses (we probably could, but we don't  
> care right now).
>  //
>  object EmailValidatorNoDomainValidation extends EmailValidator(false) {
>
>    private val DomainLabelRegex =  
> "\\p{Alnum}(?>[\\p{Alnum}-]*\\p{Alnum})*"
>    private val TopLabelRegex    = "\\p{Alpha}{2,}"
>    private val DomainNameRegex  = "^(?:" + DomainLabelRegex + "\\.)+" +  
> "(" + TopLabelRegex + ")$"
>
>    private val DomainRegex = new RegexValidator(DomainNameRegex)
>
>    override def isValidDomain(domain: String) =
>      Option(DomainRegex.`match`(domain)) exists (_.nonEmpty)
>  }
>
> This does require at least one "." and handles your case.
>
> -Erik
>
> [1] https://github.com/orbeon/orbeon-forms/issues/1347
> [2] https://github.com/orbeon/orbeon-forms/issues/2116
> [3]  
> https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/EmailValidator.html
>
> On Fri, Jun 23, 2017 at 4:28 AM, Steven Pemberton  
> <steven.pemberton@cwi.nl> wrote:
>> Our definition of email accepts the following as a valid email address:
>>
>>        steven@cwi
>>
>> Are we OK with that? I'd expect at least one "." after the @.
>>
>> Steven
Received on Friday, 23 June 2017 19:13:29 UTC

This archive was generated by hypermail 2.3.1 : Friday, 23 June 2017 19:13:30 UTC