Well, if a user adds a space the emails do not match so the error message is correct. If you want to add another validation for allowed characters you could use a RegularExpressionValidator
on each field. Here's an example with this regex:
<asp:RegularExpressionValidator
id="RegValid"
ControlToValidate="txtEmail"
ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
ErrorMessage="Invalid email address"
runat="server" >
</asp: RegularExpressionValidator>
Looks like you need more complex validations so you could probably replace everything with a custom validator and test everything. Markup:
<asp:CustomValidator runat="server" OnServerValidate="EmailValidate" Display="Dynamic" ControlToValidate="txtEmail2" ID="vldEmail"></asp:CustomValidator>
Code behind:
protected void EmailValidate(object source, ServerValidateEventArgs args)
{
if(txtEmail1.Text != txtEmail2.Text) {
args.IsValid = False
vldEmail.ErrorMessage = "Emails are different"
}else {
//for each condition that fails set IsValid to false and choose the error message:
args.IsValid = False
vldEmail.ErrorMessage = "..."
}
}