延迟正则表达式以获得更具体的匹配

时间:2015-01-21 17:02:43

标签: javascript jquery regex

我有一个场景,我需要在代表电话公司运营商服务的数字输入上运行正则表达式测试。

在一个例子中,有一个前缀118,可以单独行动或后缀最多两位数。

目前,我的功能如下所示。我的问题是,最具体的'118'完全匹配在更具体的匹配之前触发。

在Javascript中没有睡眠/等待,除非我弄错了,我认为我不能让setTimeout返回一个简单的“return true”?

我不介意这个问题的答案是纯粹的Javascript还是Jquery,但是不依赖于Jquery会更好。

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

更新:重新:“提供输入和预期输出。”

就像我上面描述的那样,在伪代码中:

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

1 个答案:

答案 0 :(得分:2)

添加一个简单的去抖动器:

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