Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Problem with RegEx in ServiceNow

Community Alums
Not applicable

So I have a requirement to allow URLs, No spaces and comma delimited.  A dash "-" is allowed just not at beginning or beside a period "." And lastly * is only available in the first portion of the URL. I have create a regular expression that passes via regex101, but in my ServiceNow instance it fails.

Pass would be:

www.test.com
www.example.com,www-01.user.com,www.user-test.com,*.example.com
*.example.com,test.user.com

Fail:

www*.example.com
-www.example.com
www-.example.com
www.-example.com

Here is my RegEx:

^(([a-zA-Z0-9-]{1,}[a-zA-Z0-9]{1,150}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150})|^([*]{1,1}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150}))|((\,[a-zA-Z0-9-]{1,}[a-zA-Z0-9]{1,150}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150})|(\,[*]{1,1}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150}))

1 ACCEPTED SOLUTION

Community Alums
Not applicable

I got the Client script version to work, the user can enter values in a single field and the array works perfect.  The script you posted the test line was backwards.

 if (!urlArray[x].test(re))

should actually be (!re.test(urlArray[x])) and then it worked perfectly.  Also I mistakenly had a return true from the client script Yousaf provided below.  I also got the - to work in beginning and not near a . and I got only the since * to work.  Here is my final solution.

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue == '') {
        return;
    }
    var urlArray = [];
    var urlField = g_form.getValue('provide_url');
    urlArray = urlField.split(',');
    // This will restrict the usages of certain special characters. 
    
    var re = /^(([a-zA-Z0-9-]{1,}[a-zA-Z0-9]{1,}\.[a-zA-Z0-9]{1,}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,})|^([*]{1,1}\.[a-zA-Z0-9]{1,}[a-zA-Z0-9-]{1,}\.[a-zA-Z0-9]{1,}))$/;
    
    for (var x = 0; x < urlArray.length; x++) {
        if (!re.test(urlArray[x])) {
            g_form.showFieldMsg('provide_url','Invalid URL entry, please exclude slashes, colons and spaces.','error');
            return false;
        }
    }
}

View solution in original post

15 REPLIES 15

It is working in my test - do you have it set up this way?

using - ^(([a-zA-Z0-9]+([a-zA-Z0-9-]*[a-zA-Z0-9]+|[a-zA-Z0-9]*)|\*)\.[a-zA-Z0-9]+([a-zA-Z0-9-]*[a-zA-Z0-9]+|[a-zA-Z0-9]*)\.[a-zA-Z0-9]+([a-zA-Z0-9-]*[a-zA-Z0-9]+|[a-zA-Z0-9]*))

find_real_file.png

Community Alums
Not applicable

I got the Client script version to work, the user can enter values in a single field and the array works perfect.  The script you posted the test line was backwards.

 if (!urlArray[x].test(re))

should actually be (!re.test(urlArray[x])) and then it worked perfectly.  Also I mistakenly had a return true from the client script Yousaf provided below.  I also got the - to work in beginning and not near a . and I got only the since * to work.  Here is my final solution.

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue == '') {
        return;
    }
    var urlArray = [];
    var urlField = g_form.getValue('provide_url');
    urlArray = urlField.split(',');
    // This will restrict the usages of certain special characters. 
    
    var re = /^(([a-zA-Z0-9-]{1,}[a-zA-Z0-9]{1,}\.[a-zA-Z0-9]{1,}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,})|^([*]{1,1}\.[a-zA-Z0-9]{1,}[a-zA-Z0-9-]{1,}\.[a-zA-Z0-9]{1,}))$/;
    
    for (var x = 0; x < urlArray.length; x++) {
        if (!re.test(urlArray[x])) {
            g_form.showFieldMsg('provide_url','Invalid URL entry, please exclude slashes, colons and spaces.','error');
            return false;
        }
    }
}

Yousaf
Giga Sage

Hi Brian,

I guess its working please check and let me know just removed -

^(([a-zA-Z0-9]{1,}[a-zA-Z0-9]{1,150}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150})|^([*]{1,1}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150}))|((\,[a-zA-Z0-9-]{1,}[a-zA-Z0-9]{1,150}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150})|(\,[*]{1,1}\.[a-zA-Z0-9]{1,150}[a-zA-Z0-9-]{1,150}\.[a-zA-Z0-9]{1,150}))

***Mark Correct or Helpful if it helps.***

Community Alums
Not applicable

www.user.com,www-www.text.com,www.w-user.com,*.example.com 

Came back as invalid for your string as well.

Accepting here weird.

find_real_file.png


***Mark Correct or Helpful if it helps.***