首页 > 其他分享 >写一个方法,实时验证input输入的值是否满足金额如:3.56(最多只有两位小数且只能数字和小数点)的格式,其它特殊字符禁止输入

写一个方法,实时验证input输入的值是否满足金额如:3.56(最多只有两位小数且只能数字和小数点)的格式,其它特殊字符禁止输入

时间:2024-12-07 09:35:05浏览次数:2  
标签:3.56 inputElement amountInput 小数点 value 负号 开头 input 输入

function validateAmount(inputElement) {
  let value = inputElement.value;

  // 使用正则表达式匹配,允许开头为可选的负号,然后是数字和小数点,最多两位小数
  const regex = /^-?\d+(\.\d{0,2})?$/;

  if (!regex.test(value)) {
    // 如果不匹配,则去除无效字符
    inputElement.value = value.replace(/[^0-9.-]/g, '');

    // 处理多个小数点的情况,只保留第一个
    const decimalCount = (inputElement.value.match(/\./g) || []).length;
    if (decimalCount > 1) {
      inputElement.value = inputElement.value.replace(/\./g, (match, offset, string) => {
        return offset === string.indexOf('.') ? '.' : '';
      });
    }


    // 处理负号位置,只能在开头
    if (inputElement.value.startsWith('-') && inputElement.value.lastIndexOf('-') !== 0) {
       inputElement.value = '-' + inputElement.value.replace(/-/g, '');
    } else if (!inputElement.value.startsWith('-') && inputElement.value.includes('-')) {
        inputElement.value = inputElement.value.replace(/-/g, '');
    }


    // 处理以小数点开头的情况,前面加 0
    if (inputElement.value.startsWith('.')) {
      inputElement.value = '0' + inputElement.value;
    }

     // 处理负号和小数点一起开头的情况,前面加 0
    if (inputElement.value.startsWith('-.')) {
      inputElement.value = '-0' + inputElement.value.substring(1);
    }


    // 限制小数位数
    const parts = inputElement.value.split('.');
    if (parts.length === 2 && parts[1].length > 2) {
      inputElement.value = parts[0] + '.' + parts[1].substring(0, 2);
    }

  }
}



//  绑定input事件
const amountInput = document.getElementById('amountInput'); //  将 'amountInput' 替换为你输入框的ID

if (amountInput) {
  amountInput.addEventListener('input', function(event) {
    validateAmount(this);
  });
}


HTML示例:

<input type="text" id="amountInput" placeholder="请输入金额">

代码解释和改进:

  1. 正则表达式: 使用^-?\d+(\.\d{0,2})?$ 来匹配金额格式。

    • ^: 匹配字符串的开头。
    • -?: 匹配可选的负号。
    • \d+: 匹配一个或多个数字。
    • (\.\d{0,2})?: 匹配可选的小数部分,最多两位小数。
    • $: 匹配字符串的结尾。
  2. 实时校验: 使用 input 事件监听输入框的变化,并在每次输入时进行校验。

  3. 无效字符处理: 使用 replace(/[^0-9.-]/g, '') 去除任何非数字、小数点和负号的字符。

  4. 多个小数点处理: 代码现在可以处理多个小数点的情况,只保留第一个。

  5. 负号位置处理: 确保负号只能出现在开头。

  6. 小数点开头处理: 如果输入以小数点开头,则自动在前面添加 0

  7. 负号和小数点一起开头处理: 如果输入以 -. 开头,则自动在前面添加 0

  8. 小数位数限制: 限制小数部分最多只能有两位。

  9. getElementById 的错误处理: 添加了 if (amountInput) 来检查是否找到了元素,避免空指针错误。

这个改进后的版本更加健壮,可以处理各种边缘情况,并提供更好的用户体验。 它能实时响应用户的输入,并确保输入框中的值始终符合金额格式的要求。

标签:3.56,inputElement,amountInput,小数点,value,负号,开头,input,输入
From: https://www.cnblogs.com/ai888/p/18591757

相关文章

  • 1.输入输出
    Python基础语法输入:input输入自己的姓名并输出name=input("请输入你的姓名:")print(name)输出:printprint源码分析sep:默认为空格#修改拼接符为“-”name=input("请输入你的姓名:")print("您的姓名是",name,sep="-")end:默认为\n#修改结尾换行符为“,”p......
  • SAP Fiori界面上输入事务代码的设置
    SAPFiori界面上输入事务代码的设置   登录Fiori主页后,随便点击一个子菜单,比如CreateBatch,    进入如下界面,点击Menu,   然后点击Settings...,进入如下界面,   将’ShowOKCode’field栏位右边的按钮点一下,   然后保存。  后续就可以输......
  • JAVA学习-练习试用Java实现“从用户输入获取一个整数n,并打印出从1到n的所有整数的阶乘
    问题:编写一个Java程序,从用户输入获取一个整数n,并打印出从1到n的所有整数的阶乘。解答思路:以下是一个Java程序,它接受用户输入的整数n,并打印出从1到n的所有整数的阶乘:importjava.util.Scanner;publicclassFactorialCalculator{publicstaticvoidmain(String[]......
  • [原创]CEEMDAN-FTTA-CNN-BiLSTM足球队训练算法FTTA是多变量回归预测 (多输入单输出) M
    [原创]CEEMDAN-FTTA-CNN-BiLSTM足球队训练算法FTTA是多变量回归预测(多输入单输出)Matlab代码目录[原创]CEEMDAN-FTTA-CNN-BiLSTM足球队训练算法FTTA是多变量回归预测(多输入单输出)Matlab代码预测结果评价指标基本介绍程序设计参考资料预测结果评价指标......
  • C# 与 13.56MHz 射频卡:突破技术瓶颈,实现精准数据读取与处理
    在现代信息化社会中,射频识别(RFID)技术凭借其高效、非接触式的数据传输特性,广泛应用于各种领域,尤其是在物联网(IoT)、智能交通、门禁系统等场景中。13.56MHz射频卡作为一种常见的RFID卡片类型,因其高安全性、较强的抗干扰能力和较大的数据存储能力,成为许多应用的首选。为了更好......
  • AG32的时钟输入种类
    内部HSI:AG32有内置的HSI时钟:8Mhz。但是这个时钟偏差比较大,个别甚至接近10Mhz。这个时钟对于有时序要求的接口,如UART,USB等是无法接受的。为了改善这个时钟,AGM做了一个内部时钟校准,利用下载器的时钟来校准,然后存在内部flash中。校准后的精度可以在1%以内。AGM的串口启动,是没......
  • 怎样在文本框中禁用中文输入法?
    在前端开发中,禁用文本框的中文输入法主要依靠inputmode属性。虽然浏览器兼容性还不是完美,但它是目前最标准和推荐的方式。以下几种方法可以尝试,结合使用效果更佳:1.使用inputmode="latin":这是最直接和推荐的方法。inputmode="latin"告诉浏览器期望用户输入拉丁字符,从......
  • FMC293-基于FMC 16路LVDS输入或者输出子卡
     一、板卡概述 板卡基于FMC LPC接口设计16路 LVDS输入或者输出接口,用于图像传输,数据传输等应用。  板卡通过选焊接SN65LVDS386或者SN65LVDS387,只能单独输入,或者单独输出工作。 二、性能指标 三、软件内容   提供ISE或者Vivado版本的 FMC接口 AD输入或者DA......
  • Qt编写嵌入式linux输入法/支持自定义词语和繁体/支持wayland和watson/纯QWidget/界面
    一、功能特点纯QWidget编写,原创输入法机制,没有任何第三方动态库的依赖。支持各种Qt版本,包括Qt4、Qt5、Qt6及后续版本。支持各种编译器,包括mingw、msvc、gcc、clang、wasm等。支持各种目标平台,包括windows、linux、macos、android、嵌入式linux等。支持任意控件输入,包括文本......
  • 如何在Stream输入事件
    文章目录1概念介绍2使用方法StreamControllerStreamBuilder3示例代码我们在上一章回中介绍了管理Stream事件流相关的内容,本章回中将介绍如何使用Stream事件流输入输出数据。闲话休提,言归正传,让我们一起TalkFlutter吧。1概念介绍我们在上一章回中......