如何使用正则表达式进行正确的输入验证?

2024-05-10

我想让用户只输入整数或浮点数。现在我只能输入整数,它允许输入点或逗号。无法找到正确的正则表达式来验证整数和浮点数。

<input
  type="text"
  id="depositedAmount"
  maxLength={9}
  placeholder="Enter amount"
  onChange={(e) => this.handleInputChange(e, currentComProfile)}
  value={depositedAmount}
/>

handleInputChange=(e, currentComProfile) => {
    const re = /^[+-]?\d+(\.\d+)?$/;

    if (e.target.value === '' || re.test(e.target.value)) {
      if (e.target.id === 'depositedAmount') {
        this.props.updateDepositedAmount(e.target.value, currentComProfile);
      }
      if (e.target.id === 'willBeCreditedAmount') {
        this.props.updateWillBeCreditedAmount(e.target.value, currentComProfile);
      }
    }
  }

您可以使用

const rx_live = /^[+-]?\d*(?:[.,]\d*)?$/;

用于实时验证。对于最终验证,使用

const rx_final = /^[+-]?\d+(?:[.,]\d+)?$/;

或者,更好的是,只需使用正则表达式pattern属性:pattern="[+-]?\d*(?:[.,]\d*)?".

NOTE

  • ^- 字符串的开头
  • [+-]?- 可选的+ or -
  • \d*- 0个或多个数字
  • (?:[.,]\d*)?- 可选序列. or ,然后是 0 个或多个数字
  • $- 字符串末尾。

在最终验证中,\d+被用来代替\d*匹配一个或多个数字而不是零个或多个 digits.

请参阅 JS 演示:

const rx_live = /^[+-]?\d*(?:[.,]\d*)?$/;

class TestForm extends React.Component {
  constructor() {
    super();
    this.state = {
      depositedAmount: ''
    };
  }

  handleDepositeAmountChange = (evt) => {
    if (rx_live.test(evt.target.value))
        this.setState({ depositedAmount : evt.target.value });
 }
  
  render() {
    return (
      <form>
       <input
        type="text"
        id="depositedAmount"
        maxLength={9}
        pattern="[+-]?\d+(?:[.,]\d+)?"
        placeholder="Enter amount"
        onChange={this.handleDepositeAmountChange}
        value={this.state.depositedAmount}
       />
      </form>
    )
  }
}


ReactDOM.render( < TestForm /> , document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="app"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用正则表达式进行正确的输入验证? 的相关文章

随机推荐

  • 生成 C / C++ 代码时表达式的结合性和优先级?

    我编写了一个生成 AST 的基本编译器 正确考虑了表达式中运算符的优先级 但是 在执行代码生成以生成 C 代码时 我不确定如何处理括号的使用 对于这个表达式 A B c AST如下 A B C 应该正确生成包含括号的前一个表达式 但是如果第
  • C#中的FsCheck:生成形状相同的二维数组列表

    假设我正在编写一些用于视频分析的代码 这是 Video 类的简化版本 public class Video public readonly int Width public readonly int Height public readon
  • 一种简单、干净的方式来切换/交换视图?

    我已经看了几个来源 但我仍然很困惑 我想创建一个具有多个视图的应用程序 只有标准视图 没有表视图或其他任何内容 我可以在其中单击每个视图上的按钮来访问其他视图 我已经看到了多种方法来做到这一点 但对我来说唯一有意义的方法是让应用程序委托负责
  • 在 ionic 中从 Base64 打开 pdf

    因此 我将 Jasper 报告转换为 pdf 然后在 REST 控制器中转换为 base64 我该如何将其传输到我的 ionic 3 应用程序 我研究了 Ionic Native Document Viewer 但为了做到这一点 我需要将文
  • Java:带有 unicode 字符的 String.toCharArray()

    我知道 char 不能包含 Unicode 字符 例如 char c u1023 那么我该怎么做 String s ABCDEFG u1023 char c s toCharArray 出于性能原因 我想将 s 转换为 CharArray
  • 枚举和 Clojure

    在Java C世界中 人们经常使用枚举 如果我使用的是使用枚举的 Java 库 我可以在它们和关键字之间进行转换 例如 使用 java lang Enum valueOf e aget Ljava lang Enum e getEnumCo
  • R 中使用 randomForest 进行内存高效预测

    TL DR我想知道使用基于大型数据集 数百个特征 数十万行 构建的随机森林模型执行批量预测的内存有效方法 Details 我正在处理一个大型数据集 内存中超过 3GB 并且想要使用以下方法进行简单的二进制分类randomForest 由于我
  • Phantom JS 50% 的时间失败

    我搜索一个文本框 然后尝试用字符串填充它 这是代码 var fname driver FindElement By Name iFirstName 50 if fname null do System Threading Thread Sl
  • python:获取上两层目录

    好吧 我不知道模块在哪里x是 但我知道我需要向上两层目录的路径 那么 有没有更优雅的方法 import os two up os path dirname os path dirname file 欢迎提供适用于 Python 2 和 3
  • 为使用 conda 安装的仅标头库设置包含路径

    最近有人建议我作为包管理器查看 conda 不幸的是 我没有成功地找到如何让我的编译器找到与 conda 安装的仅标头库 理想情况下 我希望根本不必手动指定编译器的路径 上下文是我来自 macOS 上的自制软件 它会在正确的位置创建符号链接
  • jooq 的限制和偏移量问题

    我已将 jooq 与 spring 集成 对于对数据库 MySQL 的所有类型的查询 我使用 spring 的 JDBC 模板 这里使用 jooq 库生成 sql 查询以传递给 jdbc 模板 尽管我的其余查询工作正常 直到我向查询添加限制
  • Backbone.js el 不工作

    App Views VideoView Backbone View extend initialize function bindAll this render this model this options model this rend
  • UI键盘回避和自动布局

    鉴于 iOS 6 中对自动布局的关注以及 Apple 工程师的推荐 查看 WWDC 2012 视频 我们不再直接操作视图的框架 那么如何仅使用自动布局和 NSLayoutConstraint 来避免键盘呢 Update 这看起来是一个合理的
  • 如何获得 R 帮助?

    R 包可能有哪些可用文档 例如我尝试理解sp包裹 此外help sp 还有哪些用于搜索帮助和文档的其他功能 获取有关您知道其名称的函数的帮助 Use http www inside r org r doc utils Question或者
  • ASP.NET MVC4 教程/脚手架 - 验证和显示使用几种不同的区域设置

    我正在使用 VS 2012 RC 并尝试从此处遵循 MVC4 教程 http www asp net mvc tutorials mvc 4 getting started with aspnet mvc4 accessing your m
  • Mono for Android,读取和写入 XLSX

    我正在使用 Mono for Android 开发一个应用程序 我需要读取和创建 XLSX Excel 文件的功能 我尝试过EPPlus和NPOI 并快速浏览了一下微软的Open XML SDK 发现了以下问题 EPPlus 需要 Wind
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • 使用 Apache POI 和 Java 创建 Excel (.xlsx) 文件后文件损坏

    我已经使用 Apache POI API 使用 Java 成功创建了 xlsx 格式的工作簿 Excel 我的代码如下 在 D 盘创建一个名为 RiponAlWasim xlsx 的文件 Workbook wb new XSSFWorkbo
  • 设置 TextBlock 以保留开头和结尾的空白?

    EDIT 下面的代码实际上按照我想要的方式工作 这个问题有点误导 请忽略它 通常当我设置Text的财产TextBlock像这样 TextBlock tb new TextBlock tb Text Hello World 文本开头和结尾的空
  • 如何使用正则表达式进行正确的输入验证?

    我想让用户只输入整数或浮点数 现在我只能输入整数 它允许输入点或逗号 无法找到正确的正则表达式来验证整数和浮点数