Web表单验证中正则表达式应用初探

“条条大路通罗马”,当我们陷入大量的编码,赶工期,超进度的时候,有时可能会迷失自己。我们似乎总是会过多的投入到功能的实现上,而并不注重代码质量的高低,事实上企业只看中的结果,代码的实现,没有多少人会关注。这往往会形成一种固有思维,即习惯于用一种思路编程,而忽略了其他的实现方式。我想这个应该不仅仅是我,是很多人都存在的毛病。

怎么讲?记得自己在学校上学的时候,学习.net编程,总是很兴奋,喜欢尝试一些不同的方法。毕竟,在学校自己是毫无压力的。前几天,翻看了自己大学时上交的.NET课程作业,看了那些自己比较用心编写的代码之后,发现自己现在反而在思路方面局限了。不知道大家有没有这种感觉,特别是步入社会不久的程序员们。这种“惯性思维”是怎么形成的?我认为值得反省。

于是就有了下文。

写这篇文章,仅仅提醒下自己和正在犯这样错误的朋友,当我们忙于写代码的时候,不要只顾功能的实现,让“代码飞一会吧!",让我们换个思路。

言归正传,还是务实点吧!

<一>使用服务端控件响应服务端事件

功能描述:禁止用户输入数字(0-99)以外的字符。当用户输入完毕,之后会触发该验证事件。

 前台

            <tr class = "style1">
<td>
服务端控件响应服务端事件
<asp:TextBox ID="txtName" runat="server" AutoPostBack="True" OnTextChanged="txtName_TextChanged"></asp:TextBox>
</td>
</tr>

后台代码:

 

        /// <summary>
/// 在WEB中使用这个事件 必须修改TextBox属性的AutoPostBack = True
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void txtName_TextChanged(object sender, EventArgs e)
{
re = new Regex("\\d{1,2}");
if (!re.IsMatch(txtName.Text.Trim()))
{
Response.Write("<script>alert('0-99!')</script>");
txtName.Focus();
}
}

实现效果截图:

输入完字符之后,触发TextChanged事件。

 

<二>客户端表单响应客户端事件(姑且这样称呼吧)

功能描述:

禁止用户从键盘输入非法字符。这里限制用户只能敲击数字键。

前台

           <tr class = "style1">
<td>
客户端表单响应客户端事件
<input onkeydown="onlyNum()" />
</td>
</tr>

js Code:

function onlyNum() {
if (!((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)))//考虑小键盘上的数字键
{
event.returnvalue = false;
alert('必须输入数字!');
}
else {
//alert('必须输入数字!');
}
}

实现效果

用户只要敲击到数字键意外的键均会出发事件。

 

<三>服务端控件响应客户端事件

功能描述:与<二>同

前台

            <tr>
<td>
服务端控件响应客户端事件
<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
</td>
</tr>

js Code:

function onlyNum() {
if (!((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105)))//考虑小键盘上的数字键
{
event.returnvalue = false;
alert('必须输入数字!');
}
else {
//alert('必须输入数字!');
}

 

后台:

            if (!IsPostBack)
{
txtAge.Attributes.Add("onkeydown", "onlyNum()");
}

总体效果和源码

源码下载:Regular.rar

.NET在后台已经为我们提供了一些服务端验证控件,但是他们存在很大缺点,对事件的响应总是在要刷新页面。而且不及时性,使得用户友好性极差。

我也看到过完全用C#实现验证的,也就是说,所有东西都放到了服务端,个人不是很赞成!而自己也有意无意的在这样做。
以上仅仅是起个抛砖引玉的作用,个人能力有限,还希望大家多多指教! 

 

 

posted @ 2012-01-11 15:04  楠木大叔  阅读(490)  评论(0编辑  收藏  举报