关于正则表达式的运用,估计很多人都会觉得这很麻烦。确实很麻烦,太多表达式我也记不住,很多都是临时需要用的时候再去查,有点小学生读小说的架势,不认识的字再去翻字典。
正则表达式严格来说对于程序的功能实现作用不大,他的作用在于程序的安全性和程序保护,比如登录的时候,如果不写正则表达式,很容易产生数据注入的情况。程序的安全性得不到保障,当然用其他的判定方法也能起到同样的作用,不过相对来说,写个正则表达式是最简单的了。
这里说的是webform登录的正则表达式,那我们先建一个webform项目,然后添加一个web窗体编辑
//注:这儿最好在textbox下面添加一个label来对输入文字进行说明,以增加用户的便利性。
然后我们创建一个button-click事件,
1 protected void Button1_Click(object sender, EventArgs e) 2 { 3 string UserName = TextBox1.Text; 4 string UserPWD = TextBox2.Text;
/**************************************************/ 5 ABCbank bll = new ABCbank(); 6 bool result = bll.login(UserName ,UserPWD );
/*****//注:这儿是一个BLL中的判断调用,页面跳转中判断用户名和密码是否匹配用的***/
7 if (result == true)
8 {
9 Server.Transfer("webform2.aspx");
10 }
11 else
12 {
13 Response.Write("<script>alert('账号或密码错误')</script>");
14 }
15 }
此时,我们对上一页面两个textbox输出的两个值创建过程来返回,代码如下
public string UserName { get { return TextBox1.Text; } } public string UserPWD { get { return TextBox2.Text; } } }
这时候我们创建一个webform2窗体,在webform2中放两个label,在webform2的Page_Load下我们添加如下代码
protected void Page_Load(object sender, EventArgs e) { WebForm1 wf1; wf1 = (WebForm1)Context.Handler; Label1.Text = wf1.UserName; Label2.Text = wf1.UserPWD; }
在web.config中添加一个数据源,就可以进行跳转了。从程序上来说,这里功能实现是没有问题的。但是,是否一定要正确的用户和密码才能登入呢,当然不是,在这里就不多讲进入方式,只讲一下简单的SQL注入吧。SQL注入的意思就是通过用户名密码的输入,将SQL语句编入其中以进行数据注入,那么这样,这儿就需要进行一个程序保护问题。
我们首先考虑一下我们的用户名,是否可以制定一定的规范,就如同身份证号码,只能是15位或者18位的数字一样。假如,我们设定我们的用户名只能由英文字母和数字组成,不包含空格及标点符号,那么我们应该怎么写这个保护呢,我们首先来看看定义英文和数字的正则表达式:"^[A-Za-z0-9]+$",再看看定义密码的正则表达式,只能由字母,数字和下划线组成的表达式"^[A-Za-z0-9]+$",那我们就来对用户名和密码的输入写入正则表达式看看
string UserName = TextBox1.Text; string pattern = "^[A-Za-z0-9]+$"; Regex r = new Regex(pattern); Match m = r.Match(UserName ); if (m.Success) { Response.Write(m.Value); } else { Response.Write("用户名只能由字母和数字组成"); } string UserPWD = TextBox2.Text; string pattan1 = "^[A-Za-z0-9]+$"; Regex r1 = new Regex(pattan1); Match m1 = r1.Match(UserPWD ); if (m1.Success) { Response.Write(m1.Value); } else { Response.Write("密码只能由数字和字母组成"); }
在这里我们加入了正则表达式的判断,如果输入的字符不符合我们的判定,那么就会提示输入错误,这样就能有效的避免一些数据注入的情况。当然,同样的方法也适用于注册,或者其他一些数据输入的地方。需要说明的是,或许有人会因为我把判断写在前端来诟病这种方法会影响程序运行的速度,也有人喜欢将判定写在后台,不过我个人觉得还是前端好一些,有问题早解决,等数据传入后台的这个过程中会不会发生其他的什么数据渗透情况呢?如果能在第一时间就把非法输入给踢出局,未尝不能这样。判断和数据独立,也能保证数据的安全性。
最后,初学者,有什么说的不对的,请怀着看戏的心情阅读此文,谢谢@!