带正则表达式的JavaScript小数位数限制

带正则表达式的JavaScript小数位数限制,javascript,regex,Javascript,Regex,我对文本框进行了一些客户端验证,该文本框只允许小数点后两位的数字,没有其他输入 此脚本是仅输入数值的基础,但是需要对其进行调整,以便它可以采用小数点后最多两位小数 我尝试了一些方法,例如/[^\d]。\d{0,2},但是替换调用不起作用,我不知道如何做 代码 函数有效(f){ 如果(!/^\d*$/.test(f.value)){ f、 value=f.value.replace(/[^\d]/g,”); 警报(“无效号码”); } } 注 我需要匹配一个空字符串。如果提供了一个空字符串并

我对文本框进行了一些客户端验证,该文本框只允许小数点后两位的数字,没有其他输入

此脚本是仅输入数值的基础,但是需要对其进行调整,以便它可以采用小数点后最多两位小数

我尝试了一些方法,例如
/[^\d]。\d{0,2}
,但是替换调用不起作用,我不知道如何做

代码

函数有效(f){
如果(!/^\d*$/.test(f.value)){
f、 value=f.value.replace(/[^\d]/g,”);
警报(“无效号码”);
}
}


我需要匹配一个空字符串。如果提供了一个空字符串并提交了表单,则该值默认为零。

。字符在正则表达式中有特殊含义,因此需要转义

/^(?:\d*\.\d{1,2}|\d+)$/

这匹配123.45、123.4、123和.2、.24,但不匹配emtpy字符串,123、123.456在正则表达式中的意思是:任何字符前都必须加反斜杠<代码>\。

这样会更好:

/^\d+(\.\d{0,2})?$/
第一部分包括:

  • 点前面至少需要一个数字。如果您不想这样做,请将
    +
    替换为
    *
    ,但也会匹配空字符串
  • 如果有十进制值,则需要在前面加上点
  • 数字后面不应该有任何内容,
    $
    表示输入的结尾
对于替换零件,还应包括圆点

f.value.replace(/[^\d\.]/g, "")
编辑:


如果是用于输入的实时验证,为什么不截取keyevents并测试其有效性(通过在内存中创建字符串)或删除字段中的最后一个字符?

gs:这非常接近,但行

f.value = f.value.replace(/[^\d\.]/g, "");

实际上似乎不起作用。事实上,由于某种原因,我失去了文本框的焦点。虽然可能是我的代码;)

你真的想用正则表达式来做这件事吗

function valid(f) {
    if(isNaN(f)){return false;}
    return 100 * f == parseInt(100*f,10);
}

如果我们需要验证文本框中的numric值,在该文本框中我们要防止出现多个小数(例如2..3..2.等)

下面是它的Javascript函数

 if (MoreThanOnePoint(document.getElementById("txtNoofHrs").value) == false) {
     alert("Please enter one decimal only");
     document.forms[0].txtNoofHrs.focus();
     return false;
 }

 function MoreThanOnePoint(strString) {
     var strChar;
     var blnResult = true;
     var varcount = 0;

     for (i = 0; i < strString.length && blnResult == true; i++) {

         if (strString.charAt(i) == ".") {
             varcount++;
             if (varcount > 1) {
                 //alert("Please enter one decimal only");
                 blnResult = false;
             }
         }
     }
     return blnResult;
 }
if(超过一个点(document.getElementById(“txtNoofHrs”).value)==false){
警报(“请仅输入一位小数”);
document.forms[0].txtNoofHrs.focus();
返回false;
}
函数不止一个点(strString){
var-strChar;
var blnResult=真;
var-varcount=0;
对于(i=0;i1){
//警报(“请仅输入一位小数”);
blnResult=false;
}
}
}
返回blnResult;
}

您可以使用javascript函数代替正则表达式

function IsValid(value) {
    var split = value.split('.');

    if (split.length != 2) {
        return false;
    }
    else if (split[1].length > 2 || !Number(split[1])) {
        return false;
    }
    else if (!(split[0] == '' || split[0] == '0')) {
        return false;
    }

    return true;
}
正则表达式
JavaScript
函数有效(f){
如果(!f.value){//测试文本字段是否为空
f、 value=0;//将值初始化为0
console.log(“有效数字”);//让用户知道输入是正确的
}如果(!/^\d+(\.\d{1,2})$/.test(f.value)){//test regex
f、 value=”“;//清空文本框
console.error(“无效号码”);//让用户知道输入不正常
}否则{
console.log(“有效数字”);//让用户知道输入是正确的
}
}
document.getElementById(“testbutton”).addEventListener(//将事件侦听器添加到按钮
“点击”,
valid.bind(//将文本字段绑定到'value'函数
这
document.getElementById(“测试字段”)
)
);


测试表达式
啊,非常好,但是,我需要匹配一个空字符串。如果提供了空字符串并提交了表单,则该值默认为零。此外,如果输入“123”。则在输入框中放置点后,我会收到一个错误,因此,虽然它很有用,但实际上只适用于表单提交。此阶段是实际的输入阶段。我们是否可以使用regexIt截断两个十进制数后的数字不适用于负数salert(“Test10.50Test”。替换(/[^\d\.]/g,”);返回10.50,因此它应该工作。例如,当有多个点时,它就不起作用了。但它是用于实时输入的,所以通常会起作用,但当实际使用实时输入时,它似乎对我不起作用。但是,我可能有点不对劲。你真的想强制用户只能在小数点的右边输入两位数字,还是可以验证它是一个数字并四舍五入到小数点后两位?如果精度下降,用户了解它是非常重要的。不幸的是,这些数字通常非常重要。小数点和小数点不一样!删除字段中的最后一个字符以检查其有效性将非常有用,但前提是该字符为“.”字符。
function IsValid(value) {
    var split = value.split('.');

    if (split.length != 2) {
        return false;
    }
    else if (split[1].length > 2 || !Number(split[1])) {
        return false;
    }
    else if (!(split[0] == '' || split[0] == '0')) {
        return false;
    }

    return true;
}
/^\d+(\.\d{1,2})?$/