Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 限制输入数字小数点前后的数字_Javascript_Angularjs_Input - Fatal编程技术网

Javascript 限制输入数字小数点前后的数字

Javascript 限制输入数字小数点前后的数字,javascript,angularjs,input,Javascript,Angularjs,Input,如何限制小数点之前和之后的数字,比如123.123,这样之前最多可以有3个数字。之后最多3个数字 <div class="form-group"> <input type="number" class="form-control" name="ta" id="ta" placeholder="ta" ng-model="ta.kol" ng-maxlength="15"/> <p ng-show="taForm.kol.$error.maxlength

如何限制小数点之前和之后的数字,比如123.123,这样之前最多可以有3个数字。之后最多3个数字

   <div class="form-group">
  <input type="number" class="form-control" name="ta" id="ta" placeholder="ta" ng-model="ta.kol" ng-maxlength="15"/>
  <p ng-show="taForm.kol.$error.maxlength" class="help-block">Max 15 symbols !</p>
   </div>

最多15个符号


如果您只需在输入中添加一个事件侦听器,然后在小数点处拆分输入,就可以用一段简单的javascript来解决这一问题,然后您可以检查两部分的长度并采取相应的行动


您可以在输入字段上添加一个onchange事件,并调用一个函数,该函数使用regex验证当前输入值,并与用户进行通信

正则表达式:^[0-9]{0,3}.?[0-9]{0,3}$


要验证的JS代码:

function validateNumberInput(inputNumber){
     return number.search(/^[0-9]{0,3}.?[0-9]{0,3}$/) == 0 ? true : false;
}

您还可以用angular编写一个指令来处理相同的问题。

您可以将
ng模式
与正则表达式一起使用:


文档:

对于分数,它非常简单,因为您可以使用角数过滤器。对于数字前的数字,您应创建如下过滤器:

app.filter('beforeDigit', function ($filter) {
   return function (input) {
    if (input>1000) 
       return (input % 1000)
    elseif(input<1000)
       return input; 
   };
});
{{val | filter:{number:3}, filter:beforeDigit }}

经过数小时的工作,我创建了一个java脚本函数,用于处理按键事件。数字在小数点分隔符之前可以是8个字符,在小数点分隔符之后可以是2个字符

函数前后(e,obj){
sepDec=“”
var键码;
var fieldval=对象值;
如果(window.event)keycode=window.event.keycode;
else如果(e){keycode=e.which;}
else{return true;}
//否认第一个字符为零
if(fieldval==“”&&keycode==48)
返回false;
//拒绝第一个字符为小数点
if(fieldval==“”&(keycode==44 | | keycode==46))
返回false;
//输入第一个小数点,
//但每下一次尝试输入小数点返回false
如果(fieldval!=“”&((keycode==44 | | keycode==46))){
if(fieldval.indexOf(sepDec)<0){
var newValue=fieldval+sepDec;
$(obj).val(newValue);
}
返回false;
}
var splitfield=fieldval.split(sepDec);
分点前的var;
后分点向量;
if(splitfield.length==1){
beforeDecimalPoint=splitfield[0];
后分点=”;
}
else if(splitfield.length==2){
beforeDecimalPoint=splitfield[0];
后分点=拆分字段[1];
}
if(beforeDecimalPoint.length==8&&keycode!=8&&keycode!=0){

如果(ObjistRealSt>=0 & & Obj.Stask= BeFoEdEcimalPoal.Trime+O.O.Obj.StaskStEng.您考虑外部插件,比如NG掩码,还是需要纯角度的解决方案?HMM有趣的插件,但是如果有更简单的解决方案,那就更好了,否则就必须使用已经使用的类型<代码>编号,您可以为
max
属性(999.999)指定一个值,
min
的对应值和
step
属性0.001,当在ng模式内使用变量时,反斜杠必须转义。这是一个稍微修改的版本,反斜杠转义,它也接受逗号
^\\d{1,6}([\.\\,]\\d{0,2})?
{{val | filter:{number:3}, filter:beforeDigit }}
function BeforeAfter(e, obj) {
sepDec = "."
var keycode;
var fieldval = obj.value;

if (window.event) keycode = window.event.keyCode;
else if (e) { keycode = e.which; }
else { return true; }

// denided first charatcter to be zero
if (fieldval == "" && keycode == 48)
    return false;

// denided first character to be decimal point
if (fieldval == "" && (keycode == 44 || keycode == 46))
    return false;

// enter first decimal point, 
// but every next try to eneter decimal point return false
if (fieldval != "" && ((keycode == 44 || keycode == 46))) {
    if (fieldval.indexOf(sepDec) < 0) {
        var newValue = fieldval + sepDec;
        $(obj).val(newValue);
    }
    return false;
}



var splitfield = fieldval.split(sepDec);

var beforeDecimalPoint;
var afterDecimalPoint;

if (splitfield.length == 1) {
    beforeDecimalPoint = splitfield[0];
    afterDecimalPoint = "";
}
else if (splitfield.length == 2) {
    beforeDecimalPoint = splitfield[0];
    afterDecimalPoint = splitfield[1];
}

if (beforeDecimalPoint.length == 8 && keycode != 8 && keycode != 0) {
    if (obj.selectionStart >= 0 && obj.selectionStart <= 8)
        return false;
}

if (afterDecimalPoint.length == 2 && keycode != 8 && keycode != 0) {
    if (obj.selectionStart >= beforeDecimalPoint.length + 1 && obj.selectionStart <= beforeDecimalPoint.length + 1 + 2)
        return false;
}


return true;
}