js,只能输入正浮点数的正则?

要求是能控制整数和小数的位数,gpt用了,答案是错的。

阅读 2.4k
6 个回答
<el-input
  placeholder=""
  v-model="approvalScale"
  oninput="value=value.replace(/[^\d.]/g, '').replace(/^\D*(\d{1,12}(?:\.\d{0,4})?).*$/g, '$1')"
>

控制整数位数目:
image.png
控制小数位数:
image.png

两个replace需要结合使用

为什么非要用正则?直接转换一下,用数字判断结果就行了。

/^(?:[1-9]\d{0,整数位数-1}|0(?![.0]*$))\.\d{1,小数位数}$/

如,要求3位以内整数位,5位以内小数位

/^(?:[1-9]\d{0,2}|0(?![.0]*$))\.\d{1,5}$/

重新发,之前的有问题。输入时允许 2. 出现, 所以提交的时候要判断。

<script setup> 
function inputFun(params) {
  let target = params.target;
  let value = target.value;
  //  15 是 js 的安全小数位
  let bool = /^[0-9](|\.|\.[0-9]{1,15})$/.test(value);
  if (!bool) { 
    let val1 = value.match(/^[0-9]\.[0-9]{1,15}/);
    let val2 = value.match(/^[0-9]\./);
    let val3 = value.match(/^[0-9]/);
    if (val1) target.value = val1[0];
    else if (val2) target.value = val2[0];
    else if (val3) target.value = val3[0];
    else target.value = ""; 
  }
}
</script>

<template>
  <main>
    <input @input="inputFun" />
  </main>
</template>

/^(?!0*(\.0+)?$)\d{1,m}(\.\d{1,n})?$/

以3位整数和2位小数为例,你可以使用以下的正则表达式:

/^(?!0*(\.0+)?$)\d{1,3}(\.\d{1,2})?$/

// 正浮点数
/^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/

// 正浮点数,保留n位小数,含0
/^(0|(0|[1-9][0-9]*)+(\.\d{n}))$/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题