Little Code
Little Code

Reputation: 1545

Delaying regex for more specific matches

I have a scenario where I need to run regex tests on a numeric input that represents phone company operator services.

In one instance, there is a prefix 118 which can act on its own or with a suffix of up to two digits.

At the moment, my function looks something like the below. My problem is that the least specific '118' exact match fires before the more specific one.

There is no sleep/wait in Javascript and unless I'm mistaken, I don't think I can get setTimeout to return a simple "return true" ?

I don't mind if the answer to this question is in pure Javascript or Jquery, but not having a dependency on Jquery would be preferable.

        function isOperatorService(vNumber) {
        var vNumber = vNumber.replace(/\D/g,'');
        if (/^((44){0,1}118[0-9]{3})$/.test(vNumber)) {
                console.log("118 specific");
                return true;
        }
        if(/^((44){0,1}[19]{1}[0-9]{1}[0-79]{1})$/.test(vNumber)) {
                console.log("Other shortcodes");
                return true;
        }  
        return false;
     }

UPDATE: Re: "Provide your input and expected output."

Pretty much as I described above, in Pseudo-code :

if == 118
   wait incase the user has not finished typing (e.g. wait incase 118118...)
else
    do other regex cheks

Upvotes: 0

Views: 305

Answers (1)

George Nemes
George Nemes

Reputation: 196

Add a simple debouncer:

var timeout;
var typeDelay = 300; // wait after last type
var changeEvents = "propertychange keyup input paste change";

$('#yourinput').on(changeEvents, function () {
    //clear your timeout
    clearTimeout(timeout);

    // Add another listener
    timeout = setTimeout(function () {
        // Do your regex here
        function_ended_typing();
    }, typeDelay);
});

Upvotes: 2

Related Questions