Js: Validar email usando type="email"

Con html 5 se ha echo muy fácil la validación de formularios, por su puesto que tenía que existir un input type email. El problema es que no todos los navegadores soportan la validación automática de la w3c especificada en html5. Un ejemplo de esto, es que Safari de escritorio no soporta este input, pero Safari para móbiles (iphone & ipad) si lo soporta. Buscando en la documentación de la w3c, me encontré con la expresión regular que valida email. De esta forma podemos usar la misma expresión regular y validar en forma manual el formulario. La expreción regular es la siguiente (fuente w3c)

/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/

Luego la función en javascript que prueba la validez de una direción de correo electrónico, de igual manera que la especificada en <input type="email" /> es:

 

function testEmail( sEmail ){
  var expregEmail = new RegExp(/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-][email protected][a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$/);
  if( !expregEmail.test(sEmail) ){
    return false;
  }
  return true;
}

Luego realicé algunos test con QUnit, para probar la eficacia de la expresión regular propuesta por la W3C.

 

test("Email test", function(){
    equal(true,testEmail("[email protected]"), "Aprueba Email válido");
    equal(false,testEmail("[email protected]@chao.com"), "Detecta más de un arroba");
    equal(false,testEmail("[email protected]"), "Detecta término con punto");
    equal(false,testEmail("[email protected]"), "Detecta comienzo con punto");
    equal(false,testEmail("[email protected]"), "Detecta doa puntos seguidos en el identificador");
    equal(false,testEmail("[email protected]"), "Detecta puntos seguidos en el dominio");
    equal(true,testEmail("[email protected]"), "Permite subdominios en el dominio");
    equal(true,testEmail("{h#.o~l|a}[email protected]"), "Permite puntos y caracteres especiales en el identificador");
} );

El resultado obtenido en QUnit es el siguiente:

Como podemos ver la  expresión regular no pasó dos de los test.

Puede ves el código fuente tanto de este código como de los test en el archivo "emailVal
idator.html" en el siguiente repositorio de github https://github.com/gaviles/JsFunctions