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

Community Alums
Not applicable

Yes I pasted in RegEx101 and yours works fine.  But for some reason in SN in the Variable Validation RegEx and I assign to field in Catalog Item, the field rejects it. And it is a simple string field.  That is my issue I can't figure out.

thats weird but did you try writing in catalog client script?


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

Something like this

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }
    var re = /^(([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}))$/;
	if (!re.test(newValue)) {
        g_form.showFieldMsg('your_field name', 'Please enter a valid email address', 'error');
        return false;
    }
    return true;
}

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

Community Alums
Not applicable

The client script works, but it is allowing some comma delimited I do not want. If it is at then end such as:

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

The last two should cause the script to fail as they do not pass, but they are being accepted.

Community Alums
Not applicable

Thank you Yousaf and Sasha for helping work through my issue I really appreciate it.