惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
腾讯CDC
博客园 - 聂微东
爱范儿
爱范儿
罗磊的独立博客
P
Proofpoint News Feed
博客园 - Franky
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
美团技术团队
MongoDB | Blog
MongoDB | Blog
WordPress大学
WordPress大学
A
About on SuperTechFans
I
InfoQ
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Help Net Security
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog

博客园 - Insus.NET

Vue3实现拖放式上传 拖放式上传 实现MultipartStreamProvider经Web API上传文档或图片 文件上传和表单字段混合提交 在HttpContext.Current返回null时如何操作 angularjs根据类型动态加载组件 angularjs获取数据服务 扫一扫直连WiFi二维码 User Profile Service 服务未能登录 Visual Studio2026创建Vue项目 安装与配置node.js HTTP Error 403.14 - Forbidden VisualStudio2026回滚上一版本 消息认证码(加强) 网站无法使用插值字符串语法 HMAC(Hash-based Message Authentication Code)认证示例 浏览器自动发送域凭据 企业内小网站兼用Windows验证登录 访问用户控件的函数 onblur事件改为监听处理 将警报消息改为吐司消息 内容有无变化OnBlur即时更新引起的问题与解决 混合式提高用户编辑与操作效率 光标离开文框后即刻更新 WebForm实现Web API JavaScript对GridView删除行后并重新给其数据绑定 把CS值传给JS使用 v2 确认信息confirm由C#后端移至javascript前端 无法发布网站Web Site JavaScript判断字符是否为decimal
TextBox文本框允许用户输入正或负小数
Insus.NET · 2026-03-04 · via 博客园 - Insus.NET

按项目要求,
2个TextBox文本框,一个只接受正小数,另一个可以接受正或负小数。
因此,程序可控制在修改或新输入时,输入的数据符合要求。

2026-03-04_09-29-48

<asp:TemplateField>
    <HeaderStyle BorderColor="#c0c0c0" BorderWidth="1" />
    <ItemStyle BorderColor="#c0c0c0" BorderWidth="1" BackColor="White" />
    <HeaderTemplate>
        标准值          <%--只接受正小数--%>              
    </HeaderTemplate>
    <ItemTemplate>
        <asp:TextBox ID="TextBoxBiaoZhunZh" runat="server" Text='<%# Eval("BiaoZhunZhi") %>'
            CssClass="number-input"
            data-allow-negative="false"
            oninput="validateNumber(this)"
            onkeydown="return allowNumberKeys(this, event)"></asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
    <HeaderStyle BorderColor="#c0c0c0" BorderWidth="1" />
    <ItemStyle BorderColor="#c0c0c0" BorderWidth="1" BackColor="White" />
    <HeaderTemplate>
        替代公差      <%--接受正或负小数--%>                
    </HeaderTemplate>
    <ItemTemplate>
        <asp:TextBox ID="TextBoxTiDaiGongChai" runat="server" Text='<%# Eval("TiDaiGongChai") %>'
            CssClass="number-input"
            data-allow-negative="true"
            oninput="validateNumber(this)"
            onkeydown="return allowNumberKeys(this, event)"></asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>

View Code

Insus.NET刚开始按下面代码来实现的,
验证整数,

onkeyup="value=value.replace(/[^\d]/g,'')"
                                    onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"


验证小数,

onkeyup="value=value.replace(/[^-?\d\.]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^-?\d\.]/g,''))"

这样写法,会有问题,用户可以输入多个负符号或多个小数点。

只有写javascript来实现,
2026-03-04_09-42-55

 var lastValidValueKey = 'data-last-valid';

 // 初始化所有数字输入框
 function initNumberInputs() {
     var inputs = document.querySelectorAll('.number-input');
     for (var i = 0; i < inputs.length; i++) {
         var input = inputs[i];
         input.setAttribute(lastValidValueKey, input.value);
     }
 }

 // 验证输入并更新合法值
 function validateNumber(input) {
     var value = input.value;
     // 根据 data-allow-negative 选择正则
     var allowNegative = input.getAttribute('data-allow-negative') === 'true';
     var pattern;
     if (allowNegative) {
         // 允许正负小数:可选的负号,后面跟数字和小数点(最多一个小数点)
         pattern = /^-?(?:\d+\.?\d*|\.\d+)?$/;
     } else {
         // 只允许非负小数:只能有数字和一个小数点,不能有负号
         pattern = /^\d*\.?\d*$/;
     }

     if (pattern.test(value)) {
         input.setAttribute(lastValidValueKey, value);
     } else {
         var lastValid = input.getAttribute(lastValidValueKey);
         if (lastValid !== null) {
             input.value = lastValid;
         } else {
             input.value = '';
         }
     }
 }

 // 按键过滤(根据是否允许负号动态允许/禁止负号键)
 function allowNumberKeys(input, e) {
     var key = e.key;
     // 始终允许功能键(退格、删除、箭头等)
     if (key.length > 1) {
         return true;
     }
     // 允许数字和小数点
     if (/[\d\.]/.test(key)) {
         return true;
     }
     // 如果允许负号,且按键是负号,则允许
     var allowNegative = input.getAttribute('data-allow-negative') === 'true';
     if (allowNegative && key === '-') {
         return true;
     }
     // 其他按键(如字母)禁止
     return false;
 }

 // 页面加载完成后初始化
 if (document.readyState === 'loading') {
     document.addEventListener('DOMContentLoaded', initNumberInputs);
 } else {
     initNumberInputs();
 }

View Code