参数验证的实现思路

被验证的参数分为4种状态:init,uncheck,pass,refuse

状态

名称

说明

init

初始化状态

该状态是刚进入页面时的状态,表示textbox为空,当textbox首次输入内容时,转换为其他状态。如进行参数初始化,则会触发textchanged事件,因此需要对初始状态做一个标识,只需要进行对初始化参数的验证,如通过,则变为pass状态,如未通过,则变为uncheck状态。

uncheck

未受检状态

用户输入期间的状态,在用户输入的过程中不对用户输入内容做检查,而是在blur(lostFocus)时对输入进行检查,如通过,变为pass状态,如未通过,变为refuse状态。

pass

通过状态

验证通过,可以提交,样式可与init和uncheck相同,也可以不同

refuse

拒绝状态

验证未通过,需要修改,一般需要将样式设置为红色,并在合适的位置给出修改提示。除了init状态,当输入为空字符串时,直接进入refuse状态。

   

参数验证状态的主要作用是控制输入框的样式和提示信息的显示,而不对最后的提交内容负责,因为在提交时会重新进行一次检验。

   

输入过程中的参数校验是为了提示用户进行相应的修改,而在最后提交前,还需要再进行一次检验,可以在此次检验中进行一些耗时操作,如想后端服务器请求参数。

   

方案

  

优点

缺点

方案一

在每次需要后端验证的时候进行验证

用户友好

对数据库压力大

方案二

在最后提交时进行验证

用户友好度一般

数据库压力小

方案三

使用缓存

用户友好,数据库压力小

需要注意同步问题

   

// 失去焦点时验证参数格式

private void xLostFocus(object sender, EventArgs e)

{

if (!RegexUtils.positive_real_number.IsMatch(xTextBox.Text))

{

xstatus = InputStatus.refuse;

xhintLabel.Text = "请输入大于等于0的实数!";

}

else

{

xstatus = InputStatus.pass;

xhintLabel.Text = "";

}

}

   

// 失去焦点时验证参数格式

private void yLostFocus(object sender, EventArgs e)

{

if (!RegexUtils.positive_real_number.IsMatch(yTextBox.Text))

{

ystatus = InputStatus.refuse;

yhintLabel.Text = "请输入大于等于0的实数!";

}

else

{

ystatus = InputStatus.pass;

yhintLabel.Text = "";

}

}

   

private void xTextBox_TextChanged(object sender, EventArgs e)

{

// 如果当前状态为被拒绝,则在修改字符后变为uncheck状态

if (xstatus.Equals(InputStatus.refuse) && xTextBox.Text.Length != 0)

{

xstatus = InputStatus.uncheck;

xhintLabel.Text = "";

}

else if (xTextBox.Text.Length == 0)

{

xstatus = InputStatus.refuse;

xhintLabel.Text = "请输入大于等于0的实数!";

}

}

   

private void yTextBox_TextChanged(object sender, EventArgs e)

{

// 如果当前状态为被拒绝,则在修改字符后变为uncheck状态

if (ystatus.Equals(InputStatus.refuse) && yTextBox.Text.Length != 0)

{

ystatus = InputStatus.uncheck;

yhintLabel.Text = "";

}

else if (yTextBox.Text.Length == 0)

{

ystatus = InputStatus.refuse;

yhintLabel.Text = "请输入大于等于0的实数!";

}

}

   

   

posted @ 2021-05-24 21:03  天空树快递  阅读(190)  评论(0编辑  收藏  举报