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>');
}
}