obsidian-notes/代码/编辑框数据有效性判断.md
CSSC-WORK\murmur 3e6078442b init version
2024-04-15 11:19:57 +08:00

106 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 编辑框数据有效性判断
updated: 2022-03-14 07:46:12Z
created: 2022-01-17 02:27:09Z
tags:
- 数据筛选
---
数据有效性判断可分为两个部分,一是对单次输入的数字判断,滤除无效字符,二是输入完毕后对整个数据进行判断,如区间检查等
# 过滤单个字符
在输入时限制无效字符输入
```js
winform.plus.editBox.wndproc = function(hwnd,message,wParam,lParam){
if(message == 0x102/*_WM_CHAR*/){//对输入字符进行约束不能识别非eng输入法状态下的输入
if(wParam >= '0'# and wParam <= '9'#){
return ;
}
destr = wParam
select(wParam) {
case '-'# {
if(min > 0){
return 1;
}
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(string.indexOf(ctrl.text,'-')){
ctrl.text = string.trimleft(ctrl.text,"-")
ctrl.setsel(tmp-1)
return 1;
}
else {
ctrl.text = string.concat("-",ctrl.text)
ctrl.setsel(tmp+1)
return 1;
}
}
case 'e'#, 'E'# {
if(!string.indexOf(ctrl.text,'E') and !string.indexOf(ctrl.text,'e')){
return;
}
}
case '.'# {
if(!string.indexOf(ctrl.text,'.')){
return ;
}
}
case 'g'#, 'G'# {
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(ctrl.text != ""){
ctrl.text = tonumber(ctrl.text) * 1e3
ctrl.setsel(-1)
}
return 1;
}
case 'm'#, 'M'# {
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(ctrl.text != ""){
ctrl.text = tonumber(ctrl.text) * 1e0
ctrl.setsel(-1)
}
return 1;
}
case 'k'#, 'K'# {
if(tmp2){
key.press(0x8/*_VK_BACK*/)
}
if(ctrl.text != ""){
ctrl.text = tonumber(ctrl.text) / 1e3
ctrl.setsel(-1)
}
return 1;
}
case 0x11/*_VK_CTRL*/{
if(!tmp2){
var str = string.slice(ctrl.text,tmp,tmp2);
if(#tonumber(str) == #str){
//左侧数字+1
}
}
}
}
return 1; //其余字符全部屏蔽
}
```
# 检查单次数据
在编辑框更新后判断上限有效性
```js
case 0x300/*_EN_CHANGE*/ {
if(tonumber(owner.text) >= 1e3){//判断新数据范围
owner.text = lstValue//无效时恢复最后一次有效数据
owner.setsel(tmp)//恢复光标位置
}
lstValue = owner.text//更新最后一次有效数据
}
```
在失去焦点后评断下限有效性
#数据筛选