<php>只能输入数字的文本框-Php

本文介绍了多种使用JavaScript和正则表达式限制HTML文本框输入的方法,包括仅允许数字、小数点、字母、汉字等特定字符,以及如何控制小数点后的位数。

<input type="text" name="textfield" onKeyPress="javascript:alert(event.keyCode);return flase">


1.文本框只能输入数字代码(小数点也不能输入)
<input onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')">

2.只能输入数字,能输小数点.
<input onkeyup="if(isNaN(value))execCommand('undo')" onafterpaste="if(isNaN(value))execCommand('undo')">
<input name=txt1 onchange="if(/\D/.test(this.value)){alert('只能输入数字');this.value='';}">

3.数字和小数点方法二
<input type=text t_value="" o_value="" onkeypress="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onkeyup="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onblur="if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value}">

4.只能输入字母和汉字
<input onkeyup="value=value.replace(/[\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[\d]/g,''))" maxlength=10 name="Numbers">

5.只能输入英文字母和数字,不能输入中文
<input onkeyup="value=value.replace(/[^\w\.\/]/ig,'')">

6.只能输入数字和英文<font color="Red">chun</font>
<input onKeyUp="value=value.replace(/[^\d|chun]/g,'')">

7.小数点后只能有最多两位(数字,中文都可输入),不能输入字母和运算符号:
<input onKeyPress="if((event.keyCode<48 || event.keyCode>57) && event.keyCode!=46 || /\.\d\d$/.test(value))event.returnValue=false">

8.小数点后只能有最多两位(数字,字母,中文都可输入),可以输入运算符号:
<input onkeyup="this.value=this.value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')">


 


<input onkeyup="value=value.replace(/[^\d\.]/g,'')">

<input   type=text     onkeypress="return   event.keyCode>=65"     style="ime-mode:disabled">


<input type=text t_value="" o_value="" onkeypress="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onkeyup="if(!this.value.match(/^[\+\-]?\d*?\.?\d*?$/))this.value=this.t_value;else this.t_value=this.value;if(this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/))this.o_value=this.value" onblur="if(!this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?|\.\d*?)?$/))this.value=this.o_value;else{if(this.value.match(/^\.\d+$/))this.value=0+this.value;if(this.value.match(/^\.$/))this.value=0;this.o_value=this.value}">


<input    onkeyup="this.value=this.value.replace(/\D/g,'')"    onafterpaste="this.value=this.value.replace(/\D/g,'')">     

or
  
<input    name=txt1    onchange="if(/\D/.test(this.value)){alert('只能输入数字');this.value='';}">     

or
  
<input    onkeyup="if(isNaN(value))execCommand('undo')"    onafterpaste="if(isNaN(value))execCommand('undo')">


限制文本框只能输入数字包括小数点

<input onkeyup="value=value.replace(/[^\d\.]/g,'')">

有关正则表达式 1.只能输入数字和英文的: <input onkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text1" NAME="Text1">

2.只能输入数字的: <input onkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text2" NAME="Text2">

3.只能输入全角的: <input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" ID="Text3" NAME="Text3">

4.只能输入汉字的: <input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" ID="Text4" NAME="Text4">

移到输入框时自动选择: <input type="text" id="text1" name="text1" value="输入检索关键字" onclick="javascript:this.form.text1.focus();this.form.text1.select();" maxlength="15" />

<div class="layui-card-body layui-table-body layui-table-main"> <table class="layui-table layui-form" id="demo" lay-data="page:true" lay-filter="test"> <thead> <tr style="height:30px;"> <th lay-data="{field:'id',sort:true,width:80,fixed:'left'}">No.</th> <th lay-data="{field:'plant',fixed:'left'}">厂别</th> <th lay-data="{field:'kubie'}">库别</th> <th lay-data="{field:'category'}">出货类别</th> <th lay-data="{field:'so_number'}">票号</th> <th lay-data="{field:'pallet_number'}">板号</th> <th lay-data="{field:'liaohao'}">料号</th> <th lay-data="{field:'name'}">品名</th> <th lay-data="{field:'demand'}">需求数量</th> <th lay-data="{field:'prepared_qty'}">备料数量</th> <th lay-data="{field:'creator'}">创建人</th> <th lay-data="{field:'create_time',width:160,fixed:'right'}">上传时间</th> </tr> </thead> <tbody> <?php $i=0;$j=$pagenum;foreach($dataArr as $w){$i++;?> <tr> <td><?= $i ?></td> <td><?= $w['plant'] ?></td> <td><?= $w['kubie'] ?></td> <td><?= $w['category'] ?></td> <td><?= $w['so_number'] ?></td> <td><?= $w['pallet_number'] ?></td> <td><?= $w['material'] ?></td> <td><?= $w['name'] ?></td> <td><?= $w['demand'] ?></td> <td><?= $w['prepared_qty'] ?></td> <td><?= $w['creator'] ?></td> <td><?= $w['create_time'] ?></td> </tr> <?php $j++;} ?> </tbody> </table> </div>如上表格会有N行,请在每行设置一个点击的功能或者添加一个编辑的按钮,点击后,可以读取当行的category类型,当category为不良品时,弹出当行文本框输入备料数量prepared_qty,并可以剪辑提交将prepared_qty备料数量更新到后台数据库;当category为非不良品时,弹出多行文本框,可刷入多个箱号,prepared_qty备料数量等于箱号*10,刷入OK后,点击提交将prepared_qty备料数量更新到后台数据库
11-20
你使用的是 **Layui 框架**的前端表格(`layui-table`),并结合了 PHP 渲染后端数据。现在你的需求是: > 在每行添加一个“编辑”按钮,点击后根据 `category` 字段判断: - 如果是“不良品”,弹出输入框让用户修改 `prepared_qty`; - 如果不是“不良品”,则允许用户输入多个箱号(每箱 10 个单位),自动计算 `prepared_qty = 箱号数量 × 10`; - 最后提交更新到后台数据库。 --- ### ✅ 实现方案 我们将通过以下步骤实现: 1. 在表格中增加一列“操作”,包含【编辑】按钮; 2. 使用 Layui 的 `lay-event` 监听按钮点击; 3. 判断 `category` 类型,动态显示不同弹窗; 4. 提交数据到 PHP 后台接口进行数据库更新。 --- ### ✅ 修改后的 HTML + JavaScript 代码 ```html <div class="layui-card-body layui-table-body layui-table-main"> <table class="layui-table layui-form" id="demo" lay-filter="test"> <thead> <tr> <th lay-data="{field:'id', sort:true, width:80, fixed:'left'}">No.</th> <th lay-data="{field:'plant', fixed:'left'}">厂别</th> <th lay-data="{field:'kubie'}">库别</th> <th lay-data="{field:'category'}">出货类别</th> <th lay-data="{field:'so_number'}">票号</th> <th lay-data="{field:'pallet_number'}">板号</th> <th lay-data="{field:'liaohao'}">料号</th> <th lay-data="{field:'name'}">品名</th> <th lay-data="{field:'demand'}">需求数量</th> <th lay-data="{field:'prepared_qty'}">备料数量</th> <th lay-data="{field:'creator'}">创建人</th> <th lay-data="{field:'create_time', width:160}">上传时间</th> <th lay-data="{fixed:'right', align:'center', toolbar: '#barDemo'}">操作</th> </tr> </thead> <tbody> <?php $i = 0; foreach ($dataArr as $w) { $i++; ?> <tr data-id="<?= $w['id'] ?>" data-category="<?= htmlspecialchars($w['category']) ?>" data-prepared-qty="<?= $w['prepared_qty'] ?>" data-so-number="<?= $w['so_number'] ?>"> <td><?= $i ?></td> <td><?= htmlspecialchars($w['plant']) ?></td> <td><?= htmlspecialchars($w['kubie']) ?></td> <td><?= htmlspecialchars($w['category']) ?></td> <td><?= htmlspecialchars($w['so_number']) ?></td> <td><?= htmlspecialchars($w['pallet_number']) ?></td> <td><?= htmlspecialchars($w['material']) ?></td> <td><?= htmlspecialchars($w['name']) ?></td> <td><?= $w['demand'] ?></td> <td><?= $w['prepared_qty'] ?></td> <td><?= htmlspecialchars($w['creator']) ?></td> <td><?= htmlspecialchars($w['create_time']) ?></td> <td> <button class="layui-btn layui-btn-xs edit-btn">编辑</button> </td> </tr> <?php } ?> </tbody> </table> </div> <!-- 工具栏模板 --> <script type="text/html" id="barDemo"> <button class="layui-btn layui-btn-xs" lay-event="edit">编辑</button> </script> <!-- 引入 layui --> <script src="https://cdn.jsdelivr.net/npm/layui-v2.7.6/dist/layui.js"></script> <script> layui.use(['layer', 'table'], function(){ var layer = layui.layer; var table = layui.table; // 监听工具条事件(虽然我们用原生按钮,但也可以监听) $('.edit-btn').on('click', function () { var tr = $(this).closest('tr'); var category = tr.data('category'); var soNumber = tr.data('so-number'); var preparedQty = tr.data('prepared-qty'); if (category === '不良品') { // 不良品:直接输入 prepared_qty layer.prompt({ formType: 0, title: '修改备料数量', value: preparedQty }, function(value, index) { if (!value || isNaN(value) || value <= 0) { layer.msg('请输入有效的数量'); return; } updateToServer(soNumber, parseFloat(value)); layer.close(index); }); } else { // 非不良品:输入多行箱号 layer.open({ title: '刷入箱号(每箱10个)', area: ['400px', '300px'], content: '<textarea id="boxInput" placeholder="请逐行输入箱号..." style="width:90%;height:200px;margin:10px;"></textarea>', btn: ['确定', '取消'], yes: function(index) { var boxText = document.getElementById('boxInput').value.trim(); if (!boxText) { layer.msg('请输入箱号'); return; } var boxLines = boxText.split('\n').filter(function(line) { return line.trim() !== ''; }); var newQty = boxLines.length * 10; layer.confirm('共 ' + boxLines.length + ' 个箱号,备料数量为 ' + newQty + ',确认提交?', function(cIndex) { updateToServer(soNumber, newQty); layer.close(cIndex); layer.close(index); }); } }); } }); // 提交更新到服务器 function updateToServer(soNumber, preparedQty) { $.ajax({ url: 'update_prepared_qty.php', // 后台处理脚本 type: 'POST', data: { so_number: soNumber, prepared_qty: preparedQty }, dataType: 'json', success: function(res) { if (res.success) { layer.msg('更新成功'); location.reload(); // 可优化为局部刷新 } else { layer.msg('更新失败: ' + res.message); } }, error: function() { layer.msg('网络错误,请重试'); } }); } }); </script> ``` --- ### ✅ 后端 PHP 接口文件:`update_prepared_qty.php` ```php <?php header('Content-Type: application/json'); // 假设你已连接数据库 $pdo = new PDO("mysql:host=localhost;dbname=your_db", "username", "password"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if ($_POST['so_number'] && isset($_POST['prepared_qty'])) { $so_number = trim($_POST['so_number']); $prepared_qty = (float)$_POST['prepared_qty']; try { $stmt = $pdo->prepare("UPDATE your_table SET prepared_qty = ? WHERE so_number = ?"); $result = $stmt->execute([$prepared_qty, $so_number]); echo json_encode(['success' => true]); } catch (Exception $e) { echo json_encode(['success' => false, 'message' => $e->getMessage()]); } } else { echo json_encode(['success' => false, 'message' => '参数缺失']); } ?> ``` --- ### ✅ 功能说明 | 功能 | 描述 | |------|------| | 编辑按钮 | 每行右侧有“编辑”按钮 | | 数据绑定 | 使用 `data-*` 属性存储关键字段(如 category、so_number) | | 条件弹窗 | 根据 `category` 显示不同输入方式 | | 自动计算 | 非不良品按箱数×10计算 quantity | | 安全提交 | 使用 AJAX 提交到 PHP 接口更新数据库 | --- ### ✅ 注意事项 1. **防止 XSS 攻击**:所有输出使用 `htmlspecialchars()` 转义。 2. **SQL 注入防护**:后端使用预处理语句(PDO)。 3. **字段匹配**:确保 `so_number` 是唯一标识符或能定位到记录。 4. **可扩展性**:未来可用 Layui 表格重载代替 `location.reload()`。 --- ### ✅ 示例效果 - 点击“不良品”行 → 输入数字 → 提交 → 更新 `prepared_qty` - 点击“正常品”行 → 输入 5 行箱号 → 提交 → `prepared_qty = 50` 但category为不良品时,无单行文本框弹出
最新发布
11-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值