Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Asp.net_Regex_Validation - Fatal编程技术网

Javascript 脚本中只允许数字和点

Javascript 脚本中只允许数字和点,javascript,asp.net,regex,validation,Javascript,Asp.net,Regex,Validation,我使用这个javascript来限制用户只键入数字和一个点作为十进制分隔符 <script type="text/javascript"> function fun_AllowOnlyAmountAndDot(txt) { if(event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46) {

我使用这个javascript来限制用户只键入数字和一个点作为十进制分隔符

<script type="text/javascript">
 function fun_AllowOnlyAmountAndDot(txt)
        {
            if(event.keyCode > 47 && event.keyCode < 58 || event.keyCode == 46)
            {
               var txtbx=document.getElementById(txt);
               var amount = document.getElementById(txt).value;
               var present=0;
               var count=0;

               if(amount.indexOf(".",present)||amount.indexOf(".",present+1));
               {
              // alert('0');
               }

              /*if(amount.length==2)
              {
                if(event.keyCode != 46)
                return false;
              }*/
               do
               {
               present=amount.indexOf(".",present);
               if(present!=-1)
                {
                 count++;
                 present++;
                 }
               }
               while(present!=-1);
               if(present==-1 && amount.length==0 && event.keyCode == 46)
               {
                    event.keyCode=0;
                    //alert("Wrong position of decimal point not  allowed !!");
                    return false;
               }

               if(count>=1 && event.keyCode == 46)
               {

                    event.keyCode=0;
                    //alert("Only one decimal point is allowed !!");
                    return false;
               }
               if(count==1)
               {
                var lastdigits=amount.substring(amount.indexOf(".")+1,amount.length);
                if(lastdigits.length>=2)
                            {
                              //alert("Two decimal places only allowed");
                              event.keyCode=0;
                              return false;
                              }
               }
                    return true;
            }
            else
            {
                    event.keyCode=0;
                    //alert("Only Numbers with dot allowed !!");
                    return false;
            }

        }

    </script>

<td align="right">
<asp:TextBox ID="txtQ1gTarget" runat="server" Width="30px" CssClass="txtbx" MaxLength="6" onkeypress="return fun_AllowOnlyAmountAndDot(this);"></asp:TextBox>
</td>

我犯了什么错

这是使用正则表达式的好地方

通过使用正则表达式,您可以用一行代码替换所有代码。

您可以使用以下正则表达式来验证您的需求:

[0-9]*\.?[0-9]*

换句话说:零个或多个数字字符,后跟零个或一个句点,后跟零个或多个数字字符

您可以将代码替换为以下内容:

function validate(s) {
    var rgx = /^[0-9]*\.?[0-9]*$/;
    return s.match(rgx);
}
该代码可以替换整个函数

 <input onkeypress="return isNumber(event)" class="form-control">
请注意,必须用反斜杠转义句点(否则它代表“任意字符”)

有关在javascript中使用正则表达式的更多阅读,请查看以下内容:

您还可以在此处测试上述正则表达式:


对上面使用的正则表达式的解释:

  • 括号表示“括号内的任何字符”。您可以使用连字符(如上所述)来表示字符范围

  • *
    表示“前一表达式的零个或多个”

  • [0-9]*
    表示“零个或多个数字”

  • 反斜杠用作句点的转义字符,因为句点通常表示“任何字符”

  • 表示“零或前一个字符之一。”

  • ^
    表示字符串的开头

  • $
    表示字符串的结尾

  • ^
    开始正则表达式并以
    $
    结束正则表达式可确保整个字符串符合正则表达式模式


希望这有帮助

改用Jquery。将decimal类添加到文本框:

<input type="text" class="decimal" value="" />
检查这把小提琴:

希望有帮助。

不要使用此选项:

onkeypress=“return fun\u AllowOnlyAmountAndDot(this);”

您应该使用以下选项:

onkeypress=“return fun\u AllowOnlyAmountAndDot(this.id);”


函数数值验证(txtvalue){
var e=event | | evt;//用于跨浏览器兼容性
var charCode=e.which | e.keyCode;
if(!(document.getElementById(txtvalue.id.value))
{
如果(字符码>31&(字符码<48 | |字符码>57))
返回false;
返回true;
}
否则{
var val=document.getElementById(txtvalue.id).value;
如果(charCode==46 | |(charCode>31&&(charCode>47&&charCode<58)))
{
var点=0;
点=val.indexOf(“.”,点);
如果(点>=1&&charCode==46)
{      
返回false;
}                 
如果(点==1)
{
var lastdigits=val.substring(val.indexOf(“.”+1,val.length);
如果(lastdigits.length>=2)
{
警报(“仅允许小数点后两位”);
返回false;
}
}
返回true;
}
否则{
警报(“仅允许使用Numarics”);
返回false;
}
}
}

这对我最合适

我还对blur应用了货币格式化程序,其中小数部分四舍五入为2位,以防在使用parseFloat进行验证之后

获取和设置光标位置的函数来自Vishal Monpara的博客。我也用这些函数做了一些很好的聚焦。如果需要,可以轻松删除强制使用2个小数的2个代码块,并去掉set/get插入符号函数

<html>
<body>
<input type="text" size="30" maxlength="30" onkeypress="return numericValidation(this,event);" />
<script language="JavaScript">
    function numericValidation(obj,evt) {
        var e = event || evt; // for trans-browser compatibility

        var charCode = e.which || e.keyCode;        

        if (charCode == 46) { //one dot
            if (obj.value.indexOf(".") > -1)
                return false;
            else {
                //---if the dot is positioned in the middle give the user a surprise, remember: just 2 decimals allowed
                var idx = doGetCaretPosition(obj);
                var part1 = obj.value.substr(0,idx),
                    part2 = obj.value.substring(idx);

                if (part2.length > 2) {
                    obj.value = part1 + "." + part2.substr(0,2);
                    setCaretPosition(obj, idx + 1);
                    return false;
                }//---

                //allow one dot if not cheating
                return true;
            }
        }
        else if (charCode > 31 && (charCode < 48 || charCode > 57)) { //just numbers
            return false;
        }

        //---just 2 decimals stubborn!
        var arr = obj.value.split(".") , pos = doGetCaretPosition(obj);

        if (arr.length == 2 && pos > arr[0].length && arr[1].length == 2)                               
            return false;
        //---

        //ok it's a number
        return true;
    }

    function doGetCaretPosition (ctrl) {
        var CaretPos = 0;   // IE Support
        if (document.selection) {
        ctrl.focus ();
            var Sel = document.selection.createRange ();
            Sel.moveStart ('character', -ctrl.value.length);
            CaretPos = Sel.text.length;
        }
        // Firefox support
        else if (ctrl.selectionStart || ctrl.selectionStart == '0')
            CaretPos = ctrl.selectionStart;
        return (CaretPos);
    }

    function setCaretPosition(ctrl, pos){
        if(ctrl.setSelectionRange)
        {
            ctrl.focus();
            ctrl.setSelectionRange(pos,pos);
        }
        else if (ctrl.createTextRange) {
            var range = ctrl.createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }
    }
</script>
</body>
</html>

功能数字验证(obj、evt){
var e=event | | evt;//用于跨浏览器兼容性
var charCode=e.which | e.keyCode;
如果(charCode==46){//一个点
if(对象值索引of(“.”>-1)
返回false;
否则{
如果点位于中间,给用户一个惊喜,记住:只允许2小数。
var idx=doGetCaretPosition(obj);
var part1=对象值substr(0,idx),
第2部分=对象值子字符串(idx);
如果(零件2.长度>2){
obj.value=part1+““+part2.substr(0,2);
setCaretPosition(obj,idx+1);
返回false;
}//---
//如果不作弊,允许一个点
返回true;
}
}
else如果(charCode>31&(charCode<48 | | charCode>57)){//仅数字
返回false;
}
//---只有两个小数点顽固!
var arr=对象值拆分(“.”),pos=doGetCaretPosition(对象);
如果(arr.length==2&&pos>arr[0]。length&&arr[1]。length==2)
返回false;
//---
//好的,这是一个数字
返回true;
}
函数doGetCaretPosition(ctrl){
var CaretPos=0;//IE支持
if(文档选择){
ctrl.focus();
var Sel=document.selection.createRange();
Sel.moveStart('character',-ctrl.value.length);
CaretPos=Sel.text.length;
}
//Firefox支持
else if(ctrl.selectionStart | | ctrl.selectionStart=='0')
CaretPos=ctrl.selectionStart;
返回(CaretPos);
}
功能设置CaretPosition(ctrl,pos){
如果(ctrl.setSelectionRange)
{
ctrl.focus();
控制设置选择范围(位置,位置);
}
else if(ctrl.createTextRange){
var范围
<script type="text/javascript">
    function numericValidation(txtvalue) {
        var e = event || evt; // for trans-browser compatibility
        var charCode = e.which || e.keyCode;
        if (!(document.getElementById(txtvalue.id).value))
         {
            if (charCode > 31 && (charCode < 48 || charCode > 57))
                return false;
            return true;
        }
        else {
               var val = document.getElementById(txtvalue.id).value;
            if(charCode==46 || (charCode > 31 && (charCode > 47 && charCode < 58)) )
             {
                var points = 0;            
                points = val.indexOf(".", points);                    
                if (points >= 1 && charCode == 46)
                {      
                   return false;
                }                 
                if (points == 1) 
                {
                    var lastdigits = val.substring(val.indexOf(".") + 1, val.length);
                    if (lastdigits.length >= 2)
                    {
                        alert("Two decimal places only allowed");
                        return false;
                    }
                }
                return true;
            }
            else {
                alert("Only Numarics allowed");
                return false;
            }
        }
    }

</script>
<form id="form1" runat="server">
<div>
  <asp:TextBox ID="txtHDLLevel" MaxLength="6" runat="server" Width="33px" onkeypress="return numericValidation(this);"  />
</div>
</form>
<html>
<body>
<input type="text" size="30" maxlength="30" onkeypress="return numericValidation(this,event);" />
<script language="JavaScript">
    function numericValidation(obj,evt) {
        var e = event || evt; // for trans-browser compatibility

        var charCode = e.which || e.keyCode;        

        if (charCode == 46) { //one dot
            if (obj.value.indexOf(".") > -1)
                return false;
            else {
                //---if the dot is positioned in the middle give the user a surprise, remember: just 2 decimals allowed
                var idx = doGetCaretPosition(obj);
                var part1 = obj.value.substr(0,idx),
                    part2 = obj.value.substring(idx);

                if (part2.length > 2) {
                    obj.value = part1 + "." + part2.substr(0,2);
                    setCaretPosition(obj, idx + 1);
                    return false;
                }//---

                //allow one dot if not cheating
                return true;
            }
        }
        else if (charCode > 31 && (charCode < 48 || charCode > 57)) { //just numbers
            return false;
        }

        //---just 2 decimals stubborn!
        var arr = obj.value.split(".") , pos = doGetCaretPosition(obj);

        if (arr.length == 2 && pos > arr[0].length && arr[1].length == 2)                               
            return false;
        //---

        //ok it's a number
        return true;
    }

    function doGetCaretPosition (ctrl) {
        var CaretPos = 0;   // IE Support
        if (document.selection) {
        ctrl.focus ();
            var Sel = document.selection.createRange ();
            Sel.moveStart ('character', -ctrl.value.length);
            CaretPos = Sel.text.length;
        }
        // Firefox support
        else if (ctrl.selectionStart || ctrl.selectionStart == '0')
            CaretPos = ctrl.selectionStart;
        return (CaretPos);
    }

    function setCaretPosition(ctrl, pos){
        if(ctrl.setSelectionRange)
        {
            ctrl.focus();
            ctrl.setSelectionRange(pos,pos);
        }
        else if (ctrl.createTextRange) {
            var range = ctrl.createTextRange();
            range.collapse(true);
            range.moveEnd('character', pos);
            range.moveStart('character', pos);
            range.select();
        }
    }
</script>
</body>
</html>
function isNumber(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 46 || charCode > 57)) {
        return false;
    }
    return true;
}
<input id="deneme" data-mini="true" onKeyPress="return isNumber(event)" type="text"/>`
 <input type="text" class="form-control" id="odometer_reading" name="odometer_reading"  placeholder="Odometer Reading" onblur="odometer_reading1();" onkeypress='validate(event)' required="" />
<script>
                function validate(evt) {
                  var theEvent = evt || window.event;
                  var key = theEvent.keyCode || theEvent.which;
                  key = String.fromCharCode( key );
                  var regex = /[0-9]|\./;
                  if( !regex.test(key) ) {
                    theEvent.returnValue = false;
                    if(theEvent.preventDefault) theEvent.preventDefault();
                  }
                }
            </script>
<input type="text" class="decimal" value="" />
$('.decimal').keypress(function(evt){
    return (/^[0-9]*\.?[0-9]*$/).test($(this).val()+evt.key);
});
onkeypress='return event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)'
function isNumber(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)&&(charCode!=46)) {
        return false;
    }
    return true;
}
 <input onkeypress="return isNumber(event)" class="form-control">
 <script type="text/Javascript">
        function checkDecimal(inputVal) {
            var ex = /^[0-9]+\.?[0-9]*$/;
            if (ex.test(inputVal.value) == false) {
                inputVal.value = inputVal.value.substring(0, inputVal.value.length - 1);
            }
        }
</script>
$(document).on("input", ".numeric", function() {
this.value = this.value.match(/^\d+\.?\d{0,2}/);});