2015-10-22 31 views
0

我有,我要限制用户小数点后不能使用两个以上的值一个量场:如何为两位数限制十进制值和十进制限制多于一个的数值

  1. 后小数点应该只有两个值是选项。
  2. 用户不能在该字段中键入多个小数。

我使用的是以下regix,因为它不工作可以帮助任何人。

function validate(evt) { 

    if (evt.keyCode == 8) { return true; }// for backspace problem in mozilla 

    var theEvent = evt || window.event; 
    var key = theEvent.keyCode || theEvent.which; 

    key = String.fromCharCode(key); 
    var regex = /[0-9 ]|\,\d{1,2}/; 

    if (!regex.test(key)) 
    { 
     theEvent.returnValue = false; 
     if (theEvent.preventDefault) theEvent.preventDefault(); 
    } 
} 
+0

这是更好的UX简单地让用户输入他想要的东西但是告诉他这是无效的。 – Bergi

+0

像002.45这样的数字呢? – BenM

+0

我在提交后显示为消息。但我想限制用户。 –

回答

0

这实际上可以使用HTML仅通过设置数字字段的STEP和MAX实现,例如

<form> 
 
\t <input type="number" name="myNumber" required=true step=".01"> 
 
\t <button>send</button> 
 
</form>

请让我知道,如果这是你找什么因为这意味着输入的任何值都必须是数字(因此只有一个小数点),它必须小于或等于1(如果不想包含1,则可以设置为.99),并且它必须是一个增量.01(所以它只能有2个小数位。

刚刚重新阅读你的问题,你可以删除MAX(我想我读不超过1.0)

+0

这仍然允许用户覆盖该值并物理输入类似“1.456677”的内容。在REQUIRED属性中编辑的 – BenM

+0

。目前大多数浏览器将确保满足这些条件。但我明白你的来自旧的浏览器无法验证的地方,我也不会相信 – PC3TJ

+0

这也不起作用 –

0

var previousValue; 
 

 
function numberChanged(element){ 
 
    if(validateMe(element)==false){ 
 
     element.value=previousValue; 
 
    }else{ 
 
     previousValue=element.value; 
 
    
 
    } 
 

 
function validateMe(element){ 
 
    wholeNumber=element.value.split(".")[0]; 
 
    if(element.value.split(".").length==1){ 
 
     if(wholeNumber<-1 || > 999999999){ 
 
       
 
      return false; 
 
      } 
 
    }else if(element.value.split(".").length==2){ 
 
     decimalValue=element.value.split(".")[1]; 
 
     if(decimalValue>-1 && decimalValue<100){ 
 
       if(wholeNumber<-1 || > 999999999){ 
 
       
 
      return false; 
 
      } 
 
      }else{ 
 
      return false; 
 
      } 
 
    }else{ 
 
     return false; 
 
    } 
 
    
 
}
<input type="text" id="myNumber" onChange="numberChanged(this)" />

+0

这行看起来不正确:'if(element.value.split(“)。 “)。长度= 1){'。 –

+0

对不起应该== – PC3TJ