Multiple Value Type Constraints

Being able to use multiple value types would be nice so that you can show different error messages when a mistake is made.

Example - the regular expression for a valid email is this:

(?:[a-z0-9!#$%&'+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_{|}~-]+)|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\[\x01-\x09\x0b\x0c\x0e-\x7f])")@(?:(?:a-z0-9?.)+a-z0-9?|[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])).){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-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])+)])

However, something could fail for not having an @, not having a . or using a capital letter (which while technically allowed in an email, always translated on the backend). It would be helpful to be able to break the regular expression down into multiple rules or chunks and then use more helpful error messages to direct users as to what is wrong if they mistype an email.

Example:

Not helpful - Your email address did not pass the regular expression.

Helpful - Your email address does not contain an @.