Ho 2 controlli js, uno per la mail e l'altro per url, ma ho notato che il simbolo OR | si comporta diversamente:
codice per mail, OR (dopo la chiocciola) accetta il punto o il trattino, non li accetta assieme uno dopo l'altro
codice:
var reg = new RegExp("^(([-_!#$%&*+=?^{|}~A-Za-z0-9/]+)\\.)*[-_!#$%&*+=?^{|}~A-Za-z0-9/]+[@](([A-Za-z0-9]+)(\\.|-))*[A-Za-z0-9]+(\\.[a-z0-9]{1,})$");
Mentre il codice che valida l'url accetta gli OR tutti e 3 assieme (all'inizio della reg)
codice:
var reg = new RegExp("^(http(s)?:\/\/|ftp(s)?:\/\/|www\\.)[A-Za-z0-9][-_!#$%&;:.,*+=?^{|}~A-Za-z0-9/]*[a-z0-9](\\.[a-z]{2,4})$");