允许使用 Regex 以单点浮动,如果该值无效,则将其替换为有效值

Float with single dot using Regex allowed and replacing the value with the valid value if it is invalid value

我希望文本字段应该允许带有单点的浮点数,如果我从某个地方复制它会替换它并使其成为浮点数。

但下面的代码仅适用于数字

$("#max_width_value").bind("change keyup input", function (e) {
    if (this.value.match(/\D+/g)) {
        this.value = this.value.replace(/\D+/g, '');
    }
});

允许: 0.2, 2.2 , 2.0 , .2

不允许: 2.2. , 0.2。

文本字段不应超过单个点,但如果用户在文本字段中复制和粘贴,则应仅粘贴浮点数或数字。

例如

2.2。变成 2.2

2.2.2.2.2.2也会变成2.2

  1. 会变成2

您的第一个要求可以转换为正则表达式

^\d*\.\d+$

第二个是

的替代品
^(\d*(\.\d+)?).*$


  • 值得一提的是,您通过将要点和后面的内容括在括号中后跟一个问号来说明要点和后面的内容是可选的。

  • 我们用 ^ 和 $ 锚定正则表达式,以确保它是唯一的输入,没有任何后续或后续操作。

这可以帮助你:

/^(\d*(?:\.\d+)?)/

^       // anchor for start of string
(       // start of capture group, indicates start of string of interest
\d*     // allows zero or more digits before point
(?:\.   // first point
\d+)?   // allows one or more digits after point optionally
)       // end of capture group

您可以使用 </code></p> 获取捕获字符串 <p>我的正则表达式中有 <code>(?:\d+)? 来处理 2. 个案例。

Demo


编辑:如果您只想接受感兴趣的字符串后的 . 和数字,您可以使用。它将拒绝包含不在 []

内的任何字符的任何字符串
^(\d*(?:\.\d+)?)[\.\d]*$

我只加了

[\.\d]*$ 

它只接受 . 和数字,直到字符串结束,

Demo


编辑:下面的片段显示了我的正则表达式。我已经使用你的代码作为基础。我相信你能适应你的需要。

$(document).ready(function() {
 var value = [$("#valid").html(), $("#invalid").html()]
 var regex = /^(\d*(?:\.\d+)?)[\.\d]*$/
 for(var i=0; i < value.length; i++) {
  if (value[i].match(regex)) { 
   var result = value[i]+" is valid - "
   result += "Replace:" + value[i].replace(regex, '') + "\n";
   $("#result_valid").append(result)
  } else {
   var result = value[i]+" is invalid\n"
            $("#result_invalid").append(result)
  }

 }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id=valid>12.1.1</div>
<div id=result_valid></div>
<div id=invalid>abc12.1.1</div>
<div id=result_invalid></div>


编辑:关于 OP 的评论和需要为 "realtime" 中输入的每个字符评估字符串,我必须将正则表达式更改为更宽松的

/^(\d*\.?\d*)[\.\d]*$/

var regex = /^(\d*\.?\d*)[\.\d]*$/
 $("#spot_size_value").bind("change keyup input", function (e) {
  if (this.value.match(regex)) {
    this.value = this.value.replace(regex, '');
  } else{
    this.value = ""
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label class="col-md-2 control-label" for="spot_size">Spot Size</label>
<div class="col-md-6">
 <input id="spot_size_value" name="spot_size_value" type="text" placeholder="" class="form-control input-sm">
 <div class="validation_error" id="error_spot_size"></div>
</div>