1

我承认,尽管知道它的力量,但我从未探索过正则表达式。它对我的反击。我试图让用户将模式 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

4 回答 4

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/

于 2013-06-25T16:45:05.963 回答
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));
    });

演示

于 2013-06-25T16:54:24.953 回答
0

使用模式属性

http://cssdeck.com/labs/n8h33j1w

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

input:invalid {
  background: red;
}

input:valid {
  background: green;
}

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

于 2013-06-25T17:13:42.037 回答
0

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

像这样的要求已经在 javascript 中实现了。您再次尝试重新创建轮子。

于 2013-06-25T16:52:32.867 回答