Javascript正则表达式只检查字符串开头的数字和减号

Javascript正则表达式只检查字符串开头的数字和减号,javascript,regex,expression,Javascript,Regex,Expression,您好,我正在尝试在这个输入字段中设置一个正则表达式,只接受4个不大于2934的数字,但也接受一个负数(-2394) 我希望只允许在字符串的开头使用减号,然后只允许4个数字,不大于2934(正和负,因为它们是坐标) 已经在这里尝试了给定的解决方案,但我遗漏了一些东西 函数nummonly(myfield,e,dec){ //4196 x 4196的最大输入值 $(“#mlat,#mlon”).keyup(函数(){ var val=$(this.val().replace(/[^0-9]+/,“

您好,我正在尝试在这个输入字段中设置一个正则表达式,只接受4个不大于2934的数字,但也接受一个负数(-2394)

我希望只允许在字符串的开头使用减号,然后只允许4个数字,不大于2934(正和负,因为它们是坐标)

已经在这里尝试了给定的解决方案,但我遗漏了一些东西

函数nummonly(myfield,e,dec){
//4196 x 4196的最大输入值
$(“#mlat,#mlon”).keyup(函数(){
var val=$(this.val().replace(/[^0-9]+/,“”);
如果(val=>2934){
!/^\s*$/.test(val);
val=(parseInt(val)>2934)?2934:val;
}
否则{
(!/^\s*$/.test(val));
val=(parseInt(val)>2934)?2934:val;
}
$(this).val(val);
});
}


我正在尝试使此输入字段中的正则表达式只接受4 数字不大于2934,但也接受负数(-2394)

这里不需要正则表达式,请使用

var minValue = -2394;
var maxValue = 2934;    
var val = +$(this).val().replace(/[^0-9-]+/g,""); //using your own regex to replace non-numeric characters
var isValid = !isNaN( val ) && val < maxValue && val > minValue ;
var minValue=-2394;
var maxValue=2934;
var val=+$(this.val().replace(//[^0-9-]+/g,”);//使用您自己的正则表达式替换非数字字符
var isValid=!isNaN(val)&&valminValue;
另外,我注意到您希望将这些值设为上限和下限

if ( !isNaN( val ) )
{
    var finalVal  = isValid ? val : (val < 0 ? minValue  : maxValue);
}
if(!isNaN(val))
{
var finalVal=isValid?val:(val<0?minValue:maxValue);
}
功能编号(myfield,e,dec){
//4196 x 4196的最大输入值
$(“#mlat,#mlon”).keyup(函数(){
var val=$(this.val().replace(/[^0-9-]+/,”);
如果(parseInt(val)>2934){
val=(parseInt(val)>2934)?2934:val;
}
否则{
val=(parseInt(val)<-2934)?-2934:val;
}
$(this).val(val);
});
}
将最大长度增加到5,以满足“-”

<input id="mlat" type="text" name="mlat" maxlength="5" onkeypress="return numonly(this,event)"><br>
<input type="text" name="mlon" id="mlon" maxlength="5"  onkeypress="return numonly(this,event)">


您可以使用以下方法:

<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
<input id="mlat" type="text" name="mlat" maxlength="5" onkeypress="return numonly(this,event)"><br>
<input type="text" name="mlon" id="mlon" maxlength="5"  onkeypress="return numonly(this,event)">
<script type="text/javascript">

function numonly(myfield, e, dec){

  // max input value of 4196 x 4196
  $("#mlat").keyup(function() {
    var val = $(this).val().replace(/-?\d+[^0-9]+/,"");
    if (val => 2934){
      !/^\s*$/.test(val);
      if (val > 0) {
        val = (parseInt(val) > 2934) ? 2934 : val;
      }else{
        val = (parseInt(val) > -2394) ? val : -2394;
      }

    }
    else {
      (!/^\s*$/.test(val));
      if (val > 0) {
        val = (parseInt(val) > 2934) ? 2934 : val;
      }else{
        val = (parseInt(val) > -2394) ? val : -2394;
      }
    }
    $(this).val(val);
  })
};


</script>
</body>
</html>


功能编号(myfield,e,dec){ //4196 x 4196的最大输入值 $(“#mlat”).keyup(函数(){ var val=$(this.val().replace(/-?\d+[^0-9]+/,“”); 如果(val=>2934){ !/^\s*$/.test(val); 如果(val>0){ val=(parseInt(val)>2934)?2934:val; }否则{ val=(parseInt(val)>-2394)?val:-2394; } } 否则{ (!/^\s*$/.test(val)); 如果(val>0){ val=(parseInt(val)>2934)?2934:val; }否则{ val=(parseInt(val)>-2394)?val:-2394; } } $(this).val(val); }) };

并将maxlength替换为5以处理
-
登录输入标记。

谢谢您的回答,但使用该正则表达式时,它不允许我在数字前输入负号。@RogerHN当然,更新了正则表达式…还添加了一个全局修饰符。我遇到了一个问题,即如果我开始键入字符,然后尝试删除字符,它会保留数字ber为零,不允许我在开始处放置减号。这正常吗?如果我键入减号,它将显示最大值。我缺少什么?我设置了一个if条件,如果原始值是一个有效的整数,则只更改该值。这非常有效。有没有办法防止输入像-2--编辑答案。现在只需复制答案并在浏览器中运行它。很好!几乎完美。如果我在开始时输入一个负号,它会将值更改为-2394,或者如果我尝试在删除4个数字时删除这些数字,它会变回-2394。为此,您可以在单击按钮时调用该函数,因为现在它会在按键时触发,这就是为什么您无法获得它的原因他问。@RogerHN你有答案吗?
<html>
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
<input id="mlat" type="text" name="mlat" maxlength="5" onkeypress="return numonly(this,event)"><br>
<input type="text" name="mlon" id="mlon" maxlength="5"  onkeypress="return numonly(this,event)">
<script type="text/javascript">

function numonly(myfield, e, dec){

  // max input value of 4196 x 4196
  $("#mlat").keyup(function() {
    var val = $(this).val().replace(/-?\d+[^0-9]+/,"");
    if (val => 2934){
      !/^\s*$/.test(val);
      if (val > 0) {
        val = (parseInt(val) > 2934) ? 2934 : val;
      }else{
        val = (parseInt(val) > -2394) ? val : -2394;
      }

    }
    else {
      (!/^\s*$/.test(val));
      if (val > 0) {
        val = (parseInt(val) > 2934) ? 2934 : val;
      }else{
        val = (parseInt(val) > -2394) ? val : -2394;
      }
    }
    $(this).val(val);
  })
};


</script>
</body>
</html>