杨洋疯狂C# 刊号:201208 第1期----ASPNET验证(二)

 一、正则表达式RegularExpression类的围殴  

       

    时间:2012年08月09日 14点         地点:上海             天气:”海葵“台风还没走,但是也没下雨


     先推荐一个正则验证的WEB版工具:http://www.xaprb.com/demos/rx-toolkit/

     关于应用程序版的有很多,你可以

  

     

   

     然后会有很多正则表达式工具截图,照着搜一下软件的名称,就可以找到一些工具了,但建议你必须要达到自己能看的懂表达式的基本水平才行,以为正则表达式是活的,以后

     一些  新的正则表达式规则还要靠你去原创呢。自己做了一个表,仅供参考

   

     

     

            一定要把这两张表记熟了,看懂,言归正传,开始吧

   


 

 

   (茗)一次性判断方式

          ①邮编:

             表达式:  ^\d{6}$

          ②身份证号码:

             条    件:15位或者18位数字,17位数字+X或者x

                    表达式:^(^\d{15}$|^\d{17}(\d|X|x))$

                    说    明: |  表示 或者;你可以是  \d{15}这个整体,也可以是\d{18},或者17个\d加上一个X或者x

                    你可以用RegexBuddy作为测试工具和正则参考工具,在这里不对这个工具做赘述了,我自己用的是这个

                   

                   (你先在上面一个框写好正确的正则表达式,然后勾选它上面的下拉框为.NET,然后选中Test 选项卡,在下面写字符串,写好后,当你的字符串背景呈现黄色,说明该字符就符合了上面表达式的要求了,否则无色)

 

                ③判断你输入的是否是汉字

              表达式:    ^[\u4e00-\u9fa5]+$

 

                ④验证输入是字符串长度大于6的字符串

                     表达式:^.{6,}$

                     说    明: 点号代表  匹配除换行符以外的任意字符

             

           ⑤学会正则中的转义符-反斜杠    \.代表.号,\$代表$号,特殊字符当普通的字符用,用反斜杠,相当于C#中“@”

              验证一个两位小数

              表达式:^[0-9]+\.\d{2}$

                  

                 ⑥非零的正整数

              条    件:+2或者2都可以,02,2.2都是失败

               表达式:^\+?[1-9]\d*$

                     说    明:提高⑤的理解\+,主要单个字符组合思想[1-9]然后\d可有0个以上配在一起,*就是{0,},然后前面的正号可有可无{0,1}也就是?号都可以

              拓展题目:含有2位小数的非零的负数

 

                  ⑦验证大写字母或者小写字母

                 表达式:[A-Z]或者[a-z]

                       拓展题目:会员卡号:SX666888,SX0246810Z的身份验证,前面2位大写字母代表卡类型,后面是6位数字,6位数字后面有个可有可无的大写字母当做

                                       标识码

 

          ⑧Email的验证(RegexBuddy正则库的使用)

                 表达式: ^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$

                         这个表达式有很多版本email正则验证表达式

                         相关图片:

                             

                    

                     推荐的正则表达式查看参考库

                    

 

                     拓展题目:URL的验证,IP地址的验证

 

      (洋)多次性判断方式

    案例:验证密码,当一条正则表达式无法满足你的要求,你就要想着改变一下“一条语句做完所有验证”的思想,试着可以分开验证,先判断长度,然后是否含有大写字母,是否含有小写字母,是否含有数字,是否含有 _ 符号,你也可>以组合一些,拆着判断可能会比较轻松;这里只是提供个思路:
 

                 ①打开上次的电话号码验证解决方案,你也可以新建一个测试项目,我在上次的那个项目上继续写了

                          ②我的运行界面目前是这样的,很丑啊,只是demo啊,不要介意,主要是验证密码那个,上面一行控件可以不要

                              

                             

                           ③后台或者前台设置文本框的TextMode属性

                               

txtPassword.TextMode = TextBoxMode.Password;

 

                               

                   

                  这里我啰嗦一句了,这行代码我没写过,但我潜意识下会知道该怎么写

                  我的思路:

                  i.    现在前台属性找找,找到了TextMode,修改右侧的文本框属性立刻达成目标

                          ii.   在后台适合的事件里写这行代码,我选在Page_Load中

                          iii.  写到”txtPassword.TextMode = “尴尬了,我潜意识下,就在后面写了txtPassword.TextMode =TextMode然后没变色,我又按快捷键Shift+Alt+F10也没          

                                弹出要导入的命名空间,点号也没必要输入了,肯定点不出来。

                          iiii. 将鼠标移到txtPassword后面的TextMode上面,发现TextMode是TextBoxMode类型的,顺藤摸瓜

                               写出来了“ txtPassword.TextMode = TextBoxMode.Password;”,没猜错TextBoxMode肯定是枚举型的,写过自定义控件你就了解了

 

                             

 

                          ④在后台写的密码验证代码                         

 protected void btnValidatePassword_Click(object sender, EventArgs e)
    {
        if (IsLegalPassword(txtPassword.Text))
        {
            ltPasswordResult.Text = "密码正确";
        }
        else
        {
            ltPasswordResult.Text = "密码不合法!";
        }
    }
    public bool IsLegalPassword(string pwd)
    {
        //密码长度要大于6
        string reg1 = @"^\w{6,}$";
        //是否含有大写字母
        string reg2 = @"^\w*[A-Z]+\w*$";
        //是否含有小写字母
        string reg3 = @"^\w*[a-z]+\w*$";
        //是否含有数字
        string reg4 = @"^\w*\d+\w*$";
        //是否含有下划线
        string reg5 = @"^\w*[_]+\w*$";
        if (Regex.IsMatch(pwd, reg1) && Regex.IsMatch(pwd, reg2) && Regex.IsMatch(pwd, reg3) && Regex.IsMatch(pwd, reg4) && Regex.IsMatch(pwd, reg5))
        {
            return true;
        }
        return false;
    }

                       

 ◇以上的表达式都适合  Regex.IsMatch方法,也为JS版本教程做了铺垫
 
 
 Regex的其他方法 

      (芳) Regex.Split(string str,stringpattern)

    protected void btnSplit_Click(object sender, EventArgs e)
    {
        if (txtSplit.Text.Length != 0) {
            string[] arr = Regex.Split(txtSplit.Text,@"\d");
            txtSplit.Text = string.Empty;
            foreach (string item in arr)
            {
                txtSplit.Text += item;
            }
           // txtPhoneValidate.Text = string.Join("@", arr);
        }
    }


根据数字分段截取,返回个string类型数组
   Regex.Replace(string 源字符串,string 正则表达式,string 替换字符)
    protected void btnReplace_Click(object sender, EventArgs e)
    {
        if (txtReplace.Text.Length != 0)
        {
            string arr = Regex.Replace(txtReplace.Text, @"\d","$");
            txtReplace.Text = arr;
        }
    }
等等还有其他的一些常用方法:C#中的正则验证不仅适合Asp.NET ,还适合.NET的其他程序,例如Winform或者WPF等,但是网页中的JS就只能用于Web了,Asp.NET还是极力推荐用JS方式,所以讲这些感觉还是有一点必要的。不早了,先睡觉了
 
posted @ 2012-08-10 01:00  AYUI框架  阅读(1722)  评论(1编辑  收藏  举报