如何强制用户使用正则表达式和javascript在输入字段中输入特定模式

时间:2013-06-25 16:43:46

标签: javascript jquery html css

我承认,我从未探索过正则表达,尽管知道它的力量。它反击我。 我试图让用户输入模式P99999999到输入文本,其中P是必需的,而99999999可以取任何数字(不是字母)。我正在触发keyup,输入字段通过样式进行大写,到目前为止,这就是我所做的(我知道它太少了)。

inpt.value = $.trim( inpt.value );
if( inpt.value.indexOf( 'P' ) != 0 )
    inpt.value = inpt.value.replace(/[A-Z]/g, '');

经过一番探索后,我想出了这个

[P]+[0-9]+(?:\.[0-9]*)?

我不知道如何验证我的输入。这是由在线工具生成的。我知道它不应该那么难。任何帮助。

4 个答案:

答案 0 :(得分:3)

试试这个:

P[0-9]{8}

那是P,然后是任意数字八次。

如果P后跟任意位数有效,请尝试

P[0-9]+

这是P,然后是任何数字至少一次。

要确保这是他们输入的所有内容,请添加^和$(如评论中所述):

^P[0-9]+$

A ^是'输入开始',$是'输入结束'。

所以,你的最终代码可能是:

<input type="text" />
<div class="fail" style="display: none;">Fail!</div>

$("input").keyup(function() {
    var patt=/^P[0-9]+$/g;
    var result=patt.test($(this).val());
    if (result) {
        $(".fail").hide();        
    } else {
        $(".fail").show();        
    }
});

http://jsfiddle.net/fuMg4/1/

最后,请确保在服务器端进行检查。绕过客户端验证很容易。

此工具非常方便:http://gskinner.com/RegExr/

答案 1 :(得分:2)

[已更新以修复流输入(按住键)问题]

你去吧

正则表达式[它可能看起来非常规,因为可能没有(*)数字但是再想一想,它是实时验证而不是最终结果验证]:

^P\d*$

代码[编辑:简化]:

    $('input').on('change keyup keydown',function(){
        var txt = $(this).val();
        $(this).val(/^P\d*$/.test(txt)&txt.length<10?txt:txt.substring(0,txt.length-1));
    });

DEMO

答案 2 :(得分:0)

为什么不使用第三方插件,例如jQuery Mask Plugin ...

这样的要求已经在javascript中实现了恶作剧。你正试图再次重建轮子。

答案 3 :(得分:0)

使用模式属性

http://cssdeck.com/labs/n8h33j1w

<input type="text" required pattern="^P[0-9]+$" />

input:invalid {
  background: red;
}

input:valid {
  background: green;
}

请注意旧版浏览器需要一个polyfill(即IE),因为这是一个相对较新的属性。