建立用户、密码类型

        每次做用户密码等类型的验证都很麻烦,最近想了个办法来简化判断的逻辑。

       .Net中提供了隐式转换,虽然降低了代码可读性,但是使用确实很方便。而且我认为,定义自己的类型使用它并不会降低可读性。

       可以定义用户类型UserName
 1 using System;
 2 using System.Text.RegularExpressions;
 3 
 4 namespace SiteModel.Business
 5 {
 6     /// <summary>
 7     /// UserName 的摘要说明。
 8     /// </summary>
 9     public class UserName
10     {
11         private string username;
12 
13         public UserName(string username)
14         {
15             this.username = username;
16         }
17 
18         public static implicit operator UserName(string password) {
19             if(!AccessName(password))         //如果用户名不能通过正则表达式验证,则返回null值
20                 return null;
21             return new UserName(password.Trim());      //返回UserName实例对象
22         }
23 
24         private static bool AccessName(string name) {
25             Regex reg = new Regex("^[a-zA-Z][a-zA-Z0-9]{4,15}$");
26             if(reg.Match(name).Success)
27                 return true;
28             return false;
29         }
30     }
31 }
32 
使用的时候
SiteModel.Business.UserName username = name.Text;   //name为TextBox控件
   if(username==null) {
          Label1.Text = "<br>用户名格式输入错误!";
          return;
   }
这就简单了。


密码类型可以这样定义
 1 using System;
 2 using System.Text.RegularExpressions;
 3 
 4 namespace SiteModel.Business
 5 {
 6     /// <summary>
 7     /// PassWord 的摘要说明。
 8     /// </summary>
 9     public class PassWord
10     {
11         private string password;
12 
13         public PassWord(string password)
14         {
15             this.password = password;
16         }
17 
18         public static implicit operator PassWord(string password) {

20             if(!AccessPass(password))      //如果不通过正则表达式验证,则返回null
21                 return null;
22             return new PassWord(password.Trim().ToLower()).MD5();   //返回实例后MD5加密(转换成小写,不区分大小写)
23         }
24 
25         private string MD5() {
26             return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password.ToString(),"MD5").ToLower(); 
27         }
28 
29         private static bool AccessPass(string pass) {
30             Regex reg = new Regex("^[a-zA-Z0-9]{6,16}$");
31             if(reg.Match(pass).Success)
32                 return true;
33             return false;
34         }
35     }
36 }
37 
使用也是一样
SiteModel.Business.PassWord password = pass.Value;
   if(password==null) {
          Label2.Text = "<br>密码格式输入错误!";
         return;
   }

照这样的方法也能定义出其他项目需要的特殊数据类型。

谢平   2006年8月29日
http://www.cnblogs.com/birdshover/
posted @ 2006-08-29 10:23 Birdshover 阅读(557) 评论(7)  编辑 收藏 所属分类: .Net language and other

  回复  引用  查看    
#1楼 2006-09-07 19:15 | 火草[匿名]      
我觉的你在后台验证数据类型不是个好的方法,每次验证都要提交一次,人机交互性不好,建议你把那些验证数据类型的实现放在客户端.
顺便说下,我也是溧阳,有空交流交流,:)
  回复  引用  查看    
#2楼 [楼主]2006-09-08 08:46 | 谢平      
@火草[匿名]

你怎么知道我是溧阳的啊?
  回复  引用  查看    
#4楼 [楼主]2006-09-11 10:16 | 谢平      
呵呵
  回复  引用  查看    
#5楼 2006-09-11 19:23 | 火草[匿名]      
现在在哪混呢?
  回复  引用  查看    
#6楼 [楼主]2006-09-15 11:39 | 谢平      
@火草[匿名]
在太原了,这地方工资太低
  回复  引用  查看    
#7楼 2006-12-14 22:48 | Jason Cui      
其实后台验证不是件坏事,前台验证会被恶意用户跳过。当然前台也放一个,可以有效减少用户等等时间,但是如果你在输入的地方已经做了格式说明,那么用户还这么输的话,就属于恶意用户的范围了。

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-02-01 11:25 编辑过


相关链接: