我承认,我从未探索过正则表达,尽管知道它的力量。它反击我。 我试图让用户输入模式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]*)?
我不知道如何验证我的输入。这是由在线工具生成的。我知道它不应该那么难。任何帮助。
答案 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://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));
});
答案 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),因为这是一个相对较新的属性。