控制只能输入数字

本文介绍了一种在Delphi中实现仅允许用户在编辑框内输入数字的方法。通过使用`KeyPress`事件和调整窗口样式来确保只有数字字符可以被接受。
procedure TForm1.edtStartNumKeyPress(Sender: TObject; var Key: Char);
var
  edtStart: dWord;
begin
  //控制只能输入数字
  edtStart := GetWindowLong(edtStartNum.Handle, GWL_STYLE);
  SetWindowLong(edtStartNum.Handle, GWL_STYLE, edtStart or ES_NUMBER);
end;
在 Vue 3 中,有多种方法可以实现输入框限制只能输入数字: ### 方法一:监听 `@keypress` 事件 通过监听 `@keypress` 事件,只允许输入数字。当输入数字字符时,阻止默认输入行为。 ```vue <template> <div> <input type="text" @keypress="allowOnlyNumbers" /> </div> </template> <script setup> const allowOnlyNumbers = (event) => { const char = String.fromCharCode(event.which); // 允许输入数字(0 - 9) if (!/[0-9]/.test(char)) { event.preventDefault(); // 阻止输入 } }; </script> ``` ### 方法二:使用 `@keydown` 事件 与 `@keypress` 类似,监听 `@keydown` 事件来限制输入。 ```vue <template> <div> <input type="text" @keydown="allowOnlyNumbersOnKeydown" /> </div> </template> <script setup> const allowOnlyNumbersOnKeydown = (event) => { const char = String.fromCharCode(event.keyCode); if (!/[0-9]/.test(char)) { event.preventDefault(); } }; </script> ``` ### 方法三:封装通用方法 封装一个处理数字输入的方法,移除空格、只允许数字和小数点,并处理多个小数点的情况。 ```vue <template> <div> <input type="text" v-model="inputValue" @input="handleNumberInput(inputValue)" /> </div> </template> <script setup> import { ref } from 'vue'; const inputValue = ref(''); const handleNumberInput = (val) => { // 1. 移除所有空格 let newVal = val.replace(/\s+/g, ''); // 2. 只允许数字和小数点 newVal = newVal.replace(/[^\d.]/g, ''); // 3. 处理多个小数点的情况 const decimalCount = newVal.split('.').length - 1; if (decimalCount > 1) { const parts = newVal.split('.'); newVal = parts[0] + '.' + parts.slice(1).join(''); } // 4. 更新值 inputValue.value = newVal; }; </script> ``` ### 方法四:使用 `.number` 修饰符及样式清除 使用 `.number` 修饰符限制输入数字,同时清除 `type="number"` 自带样式。 ```vue <template> <div> <input v-model.number="testValue" type="number" /> </div> </template> <script setup> import { ref } from 'vue'; const testValue = ref(''); </script> <style scoped> /* 普通 IE 浏览器样式清除 */ input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none!important; } /* 火狐浏览器样式清除 */ input[type="number"] { -moz-appearance: textfield; } </style> ``` ### 方法五:限制范围及小数位数 限制输入范围在 1 到 100 之间,且只能输入小数点后两位,不能输入减号。 ```vue <template> <div> <input v-model="params.tongZhengPercentage" type="number" placeholder="店铺抽成占比" @input="handleInput" /> </div> </template> <script setup> import { ref } from 'vue'; const params = ref({ tongZhengPercentage: '' }); const handleInput = () => { let value = params.value.tongZhengPercentage; if (!/^[0-9]+$/.test(value)) { value = value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); } if (value > 100) { value = 100; } if (value < 0) { value = null; } if ((value[0] === '0' && value[1] > 0) || value === '00') { value = value.slice(1); } params.value.tongZhengPercentage = value; }; </script> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值