我有一个输入数字字段,它应该允许十进制前最多4个数字和十进制后最多1个数字或最多6个不带小数的数字。 例如。有效期为1.2,113.5,1234.5,456789。
我在按键上使用了这个RegEx ^\d{0,4}\.?(\.\d{0,1})?$
。它工作正常,但只有在显示113.55这样的数字后才会出错。我该如何解决这个问题?
我的Keypress功能:
函数OnKeyPress(e,DivID){
if ( e.which != 8 && e.which != 0 && e.which != 13 && e.which != 46 && (e.which < 48 || e.which > 57)) {
return false;
}
var val = j$('[id$='+DivID+']').val();
if(DivID == 'ProximityCPPercentage')
{
var x = event.which || event.keyCode;
if(val.indexOf('.') >= 0 && e.which == 46)
return false;
else if(e.which == 46 && val.length == 3)
return false;
if(val.indexOf('.') == 0)
val = '0' + val;
if(e.which != 46)
{
strval = val + String.fromCharCode(x);
var re = /^((.|0|[1-9]\d?)(\.\d{1})?|100(\.0?)?)$/;
if(!re.test(strval))
return false;
}
}
else if(val.indexOf('.') > 0)
{
if(e.which == 46 )
return false;
var arra = val.split('.');
var decval = arra[1];
var val = arra[0];
if(val.length > 6)
return false;
if(decval.length > 0)
return false;
}
else if(e.which != 46 )
{
if(val.length > 5)
return false;
}
}
答案 0 :(得分:3)
使用以下正则表达式
^\d{0,4}([.\d]\d)?$
如果您不想匹配5位数,请使用negative look-ahead assertion来避免
^(?!\d{5}$)\d{0,4}([.\d]\d)?$
答案 1 :(得分:2)
/^(?:\d{0,4}\.?(\d)|\d{0,6})?$/
注意:这也匹配.2
和12345
以及''
(空字符串)。根据您的问题,您不清楚是否要排除这些问题。
说明:
^
开始行。(?:
启动&#34;非捕获组&#34;。\d{0,4}
介于0到4位之间。\.?
零或一个字面点。(\d)
捕获一位数字。 (你想要抓住它吗?)|
或\d{0,6}
零或六位数。)
关闭我们的非捕获组(号码 2 )。$
结束这条线。var reg_exp = /^(?:\d{0,4}\.?(\d)|\d{0,6})?$/;
[
'1.2',
'113.5',
'1234.5',
'456789',
'12345',
'.2',
'',
'1234.',
'113.55'
].forEach(c => {
console.log('"' + c + '" tests to "' + reg_exp.test(c) + '"');
});
// "1.2" tests to "true"
// "113.5" tests to "true"
// "1234.5" tests to "true"
// "456789" tests to "true"
// "12345" tests to "true"
// ".2" tests to "true"
// "" tests to "true"
// "1234." tests to "false"
// "113.55" tests to "false"