输入模式匹配

时间:2016-01-11 21:55:56

标签: javascript regex pattern-matching

看起来像是一个微不足道的问题,但是如何测试你输入的密钥是否有可能实现正则表达式模式。

例如,我有一个来自服务器的字符串,如AAA,我在每个字符串循环,并有一个类似于的地图对象:

{
    '9': /\d/,
    'A': /[a-zA-Z]/,
    '*': /[a-zA-Z0-9]/
}

然后我从AAA/^([a-zA-Z])?([a-zA-Z])?([a-zA-Z])?$/构建一个正则表达式。可选标志的原因是"履行"在任何一个字符,但不超过3个字符。

无论如何,在我的keypress事件中,我有这段代码:

function(e) {
    var val = e.target.value,
        thisPress = String.fromCharCode(e.keyCode),
        potential = val + thisPress;

    if (!potential.match(mask)) {
        e.preventDefault();
    }
}
  

其中mask是正则表达式(/^([a-zA-Z])?([a-zA-Z])?([a-zA-Z])?$/)。

哪个有效,但是它还会履行,aababc,而不是在输入abc后完全履行。是不是只需要在那里包装几个组,也许可以进行字符串长度匹配或什么..

请记住,潜在的组合可能会像AA-AA_99一样转换为/^[a-zA-Z][a-zA-Z]\-[a-zA-Z][a-zA-Z]\_[0-9][0-9]$/ ..

我知道这些正则表达式语句根本没有经过优化,但是它为使用该软件的用户提供了在不知道正则表达式的情况下使用它的能力。即使它是原始的。

希望一切都有意义。

1 个答案:

答案 0 :(得分:1)

您无法使用相同的正则表达式进行实时验证(屏蔽)和最终输入验证。创建2个正则表达式:一个是你的,另一个没有?修饰符,用于最终验证。

使用

var mask = /^([a-zA-Z])?([a-zA-Z])?([a-zA-Z])?$/;

验证实时输入,

var final = /^([a-zA-Z])([a-zA-Z])([a-zA-Z])$/; 

验证最终输入。