不允许重复两个逗号两个点regex JavaScript

o2rvlv0m  于 2023-08-08  发布在  Java
关注(0)|答案(1)|浏览(103)

我想禁止多写一个点,我也想禁止多写一个逗号
如果已经有一个点(.),则不应允许写入其他点(.)或逗号(,),反之亦然
我举个例子:

function isNumberKey(evt, obj) {
  if (evt.target.selectionStart === 0 && (evt.keyCode == 46)) return false;
  var charCode = (evt.which) ? evt.which : evt.keyCode
  var value = obj.value;
  var dotcontains = value.indexOf(".") != -1;
  var commacontains = value.indexOf(",") != -1;
  if ((value.length == 0) && (event.keyCode == 46)) return false
  if (dotcontains || commacontains)
    if (charCode == 46 || charCode == 44) return false;

  if (charCode == 46 || charCode == 44) return true;
  if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;
  return true;
}

个字符
这是工作,但我需要这样做与regex
我试着用这个正则表达式:

/^[0-9]+(?:\.[0-9]+)*$/


它应该像

<input type="number" />

des4xlb0

des4xlb01#

你可以试试这个正则表达式

[^\d.,]|(^\d*[.,]\d*).*

字符串
并将其替换为$1
基本上,它只允许数字字符,.,并且只允许存在一个,.,除此之外的任何内容都将被替换为空。

编辑

根据注解中添加的信息,最多只允许3个小数位,您可以稍微更改正则表达式:

[^\d.,]|(^\d*[.,]\d{0,3}).*

编辑2

若要只允许小于100万的数字,您可以将最大有效位数限制为6,并将小数部分设置为可选:

[^\d.,]|(^\d{0,6}(?:[.,]\d{0,3})?).*

const $input = document.querySelector('input');

$input.addEventListener('input', () => {
  $input.value = $input.value.replace(/[^\d.,]|(^\d{0,6}(?:[.,]\d{0,3})?).*/g, '$1');
});
<input />

的字符串

相关问题