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

推荐订阅源

博客园_首页
阮一峰的网络日志
阮一峰的网络日志
S
Secure Thoughts
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threat Research - Cisco Blogs
P
Privacy & Cybersecurity Law Blog
The Hacker News
The Hacker News
H
Heimdal Security Blog
W
WeLiveSecurity
L
LINUX DO - 热门话题
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
The Last Watchdog
The Last Watchdog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
D
DataBreaches.Net
I
Intezer
Webroot Blog
Webroot Blog
C
Cisco Blogs
AWS News Blog
AWS News Blog
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
罗磊的独立博客
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
博客园 - 叶小钗
PCI Perspectives
PCI Perspectives
D
Docker
Scott Helme
Scott Helme
NISL@THU
NISL@THU
J
Java Code Geeks
B
Blog RSS Feed
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
The Exploit Database - CXSecurity.com
AI
AI
美团技术团队
Cloudbric
Cloudbric
月光博客
月光博客
P
Proofpoint News Feed
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
小众软件
小众软件
www.infosecurity-magazine.com
www.infosecurity-magazine.com
The Cloudflare Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

博客园 - Insus.NET

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 点击单元格弹出窗口处理数据返回父页 GridView数据控件中实现单选功能 文本框输入完后直接按回车提交数据 GridView对行进行全选或单选 用户单击文本并复制至剪帖板 Vue3格式化日期时间与插值 SQL Server中验证大小字母和数字 MS SQL Server 数据加密与解密实例 相册由原来Lightbox升级至Vue2瀑布流 从Visual Studio 2022升级至Visual Studio 2026 报表应用图表charts显示数据 钉钉(DingTalk)免登录 Upgrade Outlook Connector 程序中真实应用SignalR Web API路径与IIS站点应用程序名或虚拟目录 在您可以登录前,此副本的 Windows 必须被 Microsoft 激活。您想现在激活它吗 电脑系统由Win10降级Win7折腾还是折腾 System.ComponentModel.Win32Exception: Access is denied
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