Email Validation Multi Line Texts

Ajay1998
Tera Contributor

Hi Team,
I have a multi line variable in one of our catalog item and users are entering emails like this below

abcd@test.com

cab@test.com

 

We need to validate if above entered emails are in a correct format and also if the entered email exists in the servicenow or not.

If emails format is not correct or entered email does not exists then it should be removed from the variable.

Can anyone help me to achieve this.

Thanks
Ajay

1 ACCEPTED SOLUTION

Anand Kumar P
Giga Patron
Giga Patron

Hi @Ajay1998 ,

I have tried in my pdi its working fine.

Email which exist in ServiceNow user table no errors showing

AnandKumarP_0-1697045608048.png

Email not exist showing info email not existing in servicenow

AnandKumarP_1-1697045642383.png

Entered invalid email showing error message

AnandKumarP_2-1697045721688.png

//on change catalog client script on email variable 
function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
var emails = newValue.split('\n');
    var validEmails = [];
    var invalidEmails = [];
    for (var i = 0; i < emails.length; i++) {
        var email = emails[i].trim();
        if (isValidEmailFormat(email)) {
            validEmails.push(email);
        } else {
            invalidEmails.push(email);
        }
    }
    if (invalidEmails.length > 0) {
 g_form.addErrorMessage('enter valid email');
        g_form.setValue('email_enter', validEmails.join('\n'));//change your email field
    } else {   
        var scriptIncludeName = 'MyEmailValidationScriptInclude'; 
        var scriptInclude = new GlideAjax(scriptIncludeName);
        scriptInclude.addParam('sysparm_name', 'validateEmails');
        scriptInclude.addParam('emails', validEmails.join('\n'));
        scriptInclude.getXMLAnswer(function(response) {
            if (response === 'false') {
                g_form.showFieldMsg('email_enter',"One or more emails do not exist in user profile.",'info'); //change field backend name
                // g_form.clearValue('email_enter');
            }
        });
    }
}
function isValidEmailFormat(email) { 
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailPattern.test(email);
}
//client callable script include name-MyEmailValidationScriptInclude function name-validateEmails(change details accordingly)
var MyEmailValidationScriptInclude = Class.create();
MyEmailValidationScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateEmails: function() {
        var emails = this.getParameter('emails').split('\n');
        var valid = true;

        for (var i = 0; i < emails.length; i++) {
            var email = emails[i].trim();
            if (!this.isEmailExistsInServiceNow(email)) {
                valid = false;
                break;
            }
        }

        return valid.toString();
    },

    isEmailExistsInServiceNow: function(email) {
        var gr = new GlideRecord('sys_user');
        gr.addQuery('email', email);
        gr.query();
        return gr.hasNext();
    }
});

Please mark it helpful and solution proposed.

Thanks,

Anand

View solution in original post

4 REPLIES 4

Anand Kumar P
Giga Patron
Giga Patron

Hi @Ajay1998 ,

I have tried in my pdi its working fine.

Email which exist in ServiceNow user table no errors showing

AnandKumarP_0-1697045608048.png

Email not exist showing info email not existing in servicenow

AnandKumarP_1-1697045642383.png

Entered invalid email showing error message

AnandKumarP_2-1697045721688.png

//on change catalog client script on email variable 
function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
var emails = newValue.split('\n');
    var validEmails = [];
    var invalidEmails = [];
    for (var i = 0; i < emails.length; i++) {
        var email = emails[i].trim();
        if (isValidEmailFormat(email)) {
            validEmails.push(email);
        } else {
            invalidEmails.push(email);
        }
    }
    if (invalidEmails.length > 0) {
 g_form.addErrorMessage('enter valid email');
        g_form.setValue('email_enter', validEmails.join('\n'));//change your email field
    } else {   
        var scriptIncludeName = 'MyEmailValidationScriptInclude'; 
        var scriptInclude = new GlideAjax(scriptIncludeName);
        scriptInclude.addParam('sysparm_name', 'validateEmails');
        scriptInclude.addParam('emails', validEmails.join('\n'));
        scriptInclude.getXMLAnswer(function(response) {
            if (response === 'false') {
                g_form.showFieldMsg('email_enter',"One or more emails do not exist in user profile.",'info'); //change field backend name
                // g_form.clearValue('email_enter');
            }
        });
    }
}
function isValidEmailFormat(email) { 
    var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailPattern.test(email);
}
//client callable script include name-MyEmailValidationScriptInclude function name-validateEmails(change details accordingly)
var MyEmailValidationScriptInclude = Class.create();
MyEmailValidationScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    validateEmails: function() {
        var emails = this.getParameter('emails').split('\n');
        var valid = true;

        for (var i = 0; i < emails.length; i++) {
            var email = emails[i].trim();
            if (!this.isEmailExistsInServiceNow(email)) {
                valid = false;
                break;
            }
        }

        return valid.toString();
    },

    isEmailExistsInServiceNow: function(email) {
        var gr = new GlideRecord('sys_user');
        gr.addQuery('email', email);
        gr.query();
        return gr.hasNext();
    }
});

Please mark it helpful and solution proposed.

Thanks,

Anand

Hi @Anand Kumar P , sorry to bother you again, can we also get the value of that email which does not exist in the ServiceNow.
Your script is working perfectly for me, just I also want to show that invalid email when someone tries to raise a request with invalid email.

Thanks,
Ajay

Hi @Ajay1998 ,

//script include replace function isEmailExistsInServiceNow
isEmailExistsInServiceNow: function(emails) {
    var gr = new GlideRecord('sys_user');
    gr.addQuery('email', 'IN', emails); 
    gr.query();
    var existingEmails = [];
    while (gr.next()) {
        existingEmails.push(gr.email.toString()); 
    }

    return existingEmails; 
}

In client side-- replace from script include initilization
var scriptIncludeName = 'MyEmailValidationScriptInclude';
var scriptInclude = new GlideAjax(scriptIncludeName);
scriptInclude.addParam('sysparm_name', 'validateEmails');
scriptInclude.addParam('emails', validEmails.join('\n')); // Pass the array of emails
scriptInclude.getXMLAnswer(function(response) {
    var existingEmails = response.split('\n');
    if (existingEmails.length > 0) {
        g_form.showFieldMsg('email_enter', 'The following emails already exist in the user profile: ' + existingEmails.join(', '), 'info');
    }
});

Please mark it solution proposed and helpful.

Thanks,

Anand

Hi @Anand Kumar P 

It is giving me JavaScript error

 

Script Include side code

 

var MyEmailValidationScriptInclude = Class.create();
MyEmailValidationScriptInclude.prototype = Object.extendsObject(AbstractAjaxProcessor, {
validateEmails: function() {
var emails = this.getParameter('emails').split('\n');
//var valid = true;

for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
this.isEmailExistsInServiceNow(email);

}
},

isEmailExistsInServiceNow: function(emails) {
var gr = new GlideRecord('sys_user');
gr.addQuery('email', 'IN', emails);
gr.query();
var existingEmails = [];
while (gr.next()) {
existingEmails.push(gr.email.toString());
}

return existingEmails;
}
});

 

Client Script Side Code:

 

function onChange(control, oldValue, newValue, isLoading) {
if (isLoading || newValue == '') {
return;
}
var emails = newValue.split('\n');
var validEmails = [];
var invalidEmails = [];
for (var i = 0; i < emails.length; i++) {
var email = emails[i].trim();
if (isValidEmailFormat(email)) {
validEmails.push(email);
} else {
invalidEmails.push(email);
}
}
if (invalidEmails.length > 0) {
g_form.addErrorMessage(invalidEmails.toString() + ' is not a valid email');
g_form.setValue('email_addresses_to_add', validEmails.join('\n'));
} else {
var scriptIncludeName = 'MyEmailValidationScriptInclude';
var scriptInclude = new GlideAjax(scriptIncludeName);
scriptInclude.addParam('sysparm_name', 'validateEmails');
scriptInclude.addParam('emails', validEmails.join('\n')); // Pass the array of emails
scriptInclude.getXMLAnswer(function(response) {
var existingEmails = response.split('\n');
if (existingEmails.length > 0) {
g_form.showFieldMsg('email_addresses_to_add', 'The following emails already exist in the user profile: ' + existingEmails.join(', '), 'info');
}
});
}
}

function isValidEmailFormat(email) {
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
return emailPattern.test(email);
}

 

 

Please help me.