JSFiddle - React, Tailwind, and code Playground

by Sandeep Kumar

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="container">
    <div class="row">
        <div class="col-xs-12">
            <h1>Email validation with comma separation</h1>
        </div>
        <div class="col-xs-6">
            <form>
                <div class="form-group">
                    <label for="emails">Enter Emails: </label>
                    <input type="text" class="form-control" id="emails" placeholder="Separate emails by comma">
                </div>
                <button type="button" class="btn btn-primary" id="submit">Submit</button>
            </form>
        </div>
    </div>
</div>

CSS

.h1, h1 {
    font-size: 30px;
}

.h1, .h2, .h3, h1, h2, h3 {
    margin-top: 20px;
    margin-bottom: 10px;
}

.form-group {
    margin-bottom: 15px;
}

.form-control {
    display: block;
    width: 80%;
    height: 34px;
    padding: 6px 12px;
    font-size: 14px;
    line-height: 1.42857143;
    color: #555;
    background-color: #fff;
    background-image: none;
    border: 1px solid #ccc;
    border-radius: 4px;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
    -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
    -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
    transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
}

label {
    display: inline-block;
    max-width: 100%;
    margin-bottom: 5px;
    font-weight: 700;
}

.btn {
    display: inline-block;
    padding: 6px 12px;
    margin-bottom: 0;
    font-size: 14px;
    font-weight: 400;
    line-height: 1.42857143;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    -ms-touch-action: manipulation;
    touch-action: manipulation;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background-image: none;
    border: 1px solid transparent;
    border-radius: 4px;
}

.btn-primary {
    color: #fff;
    background-color: #337ab7;
    border-color: #2e6da4;
}

p {
    margin: 0 0 10px;
}

.text-danger {
    color: #a94442;
}

.text-success {
    color: #96B38A;
}

JavaScript

$(document).ready(function() {
    $('#submit').click(function() {
        validateMultipleEmails($('#emails').val());
    });
});

function validateMultipleEmails(emailInput) {
    $('.form-group .text-danger').remove();
    $('.form-group .text-success').remove();
    
    // Get value on emails input as a string
    var emails = emailInput;
    
    if(emails.length === 0) {
        $('.form-group').append('<p class="text-danger">Enter atleast one email address to validate.</p>');
        
        return;
    }
    
    // Split string by comma into an array
    emails = emails.split(",");

    var valid = true;
    var regex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
    
    var invalidEmails = [];
    
    for (var i = 0; i < emails.length; i++) {
        // Trim whitespaces from email address
        emails[i] = emails[i].trim();
        
        // Check email against our regex to determine if email is valid
        if( emails[i] == "" || ! regex.test(emails[i])){
            invalidEmails.push(emails[i]);
        }
    }
    
    // Output invalid emails
    if(invalidEmails != 0) {
        $('.form-group').append('<p class="text-danger">Invalid emails: ' + invalidEmails.join(', ') + '</p>');
    } else {
        $('.form-group').append('<p class="text-success">You entered valid email(s).</p>');
    }
}