屏蔽编辑单个输入文本框的两种代码格式

时间:2011-07-07 02:01:22

标签: javascript jquery html mask

我有两个面具G999-9和H99-9代表毕业生和荣誉,需要输入单个输入文本html控件。

首次打字时,如果它打到G,我希望它显示研究生格式的格式,而对于Honors,我希望它在输入时显示Honors格式的格式。有没有一种简单的方法在javascript或jQuery中执行此操作?

示例:

G111-1
H91-5
G001-3
G___-_  (If you hit G it should show the Graduate format)
H__-_   (If you hit H it should show the Honors format.)
____-_  (Type anything else, or nothing do this.)

谢谢, 马克

3 个答案:

答案 0 :(得分:3)

<强> Regex Based Demo

耶!正则表达式!是的,就像所有其他(非HTML)解析问题一样,这是一个正则表达式。 :)

$("input").keyup(function(e){
    if(e.keyCode > 40 || e.keyCode < 37)
    {
        var validInput = $(this).val().match(/(([G])(([0-9]{3}[-]([0-9]{0,1})?|[0-9]{0,3})?)?|([H])(([0-9]{2}[-]([0-9]{0,1})?|[0-9]{0,2})?)?)/);
        $(this).val(validInput?validInput[0]:"")
    }
});

这有点令人费解(非常感谢帮助优化它),但它确实有效。

答案 1 :(得分:2)

简单的方法?你要么必须走绳子,要么使用一些花哨的正则表达式。

通常情况下,我们会使用正则表达式,但假设您对正则表达式知之甚少(可能是一个不好的假设,但大多数可以阅读它们的人会首先倾向于它们)并且希望为了让你了解正在发生的事情,我在程序上写了更多:

<input type="text" class="formatted" />

$(document).ready(function(){
    function applyMask(instr){
        var pOut = [],  delimitter = '-', format = 0, pSplit = 4, pMax = 6;
        // There are a lot of ways to express this.  I just chose one that should
        // be understandable.
        if ((instr.length > 0) && (instr[0].toUpperCase() == 'H'))
        {
            pSplit = 3;
            pMax = 5;
        } 
        pMax = Math.min(pMax, instr.length);

        for (var i=0; i < pMax; i++)
        {
            if ((i==pSplit) && (instr[i] != delimitter))
            {
                pOut.push(delimitter);
            }
            else
            {
                pOut.push(instr[i]);
            }
        }
        return pOut.join('');
    }

    $('.formatted').keyup(function(){
        $(this).val(applyMask($(this).val()).toUpperCase());
    });
});

这是一个小提琴,甚至:http://jsfiddle.net/UdcND/

答案 2 :(得分:2)

有一些jQuery插件可以轻松地将文本输入转换为掩码编辑: