C# 基于正则表达式的字符串验证

输入的字符串校验,是开发中经常遇到的问题,常用的办法是利用正则表达式进行判断。其特点是简洁有效。

1、正则表达基础知识

  正则表达式的教程很多,这里两个基础教程:

  a、http://www.cnblogs.com/youring2/archive/2009/11/07/1597786.html

  b、http://wenku.baidu.com/view/b473c4de50e2524de5187e74.html

2、常用的正则表达式

下面是一些常用的基于正则表达式的字符串校验

 1 "^\d+$" //非负整数(正整数 + 0)
 2 "^[0-9]*[1-9][0-9]*$" //正整数
 3 "^((-\d+)|(0+))$" //非正整数(负整数 + 0)
 4 "^-[0-9]*[1-9][0-9]*$" //负整数
 5 "^-?\d+$" //整数
 6 "^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)
 7 "^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
 8 "^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)
 9 "^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
10 "^(-?\d+)(\.\d+)?$" //浮点数
11 "^[A-Za-z]+$" //由26个英文字母组成的字符串
12 "^[A-Z]+$" //由26个英文字母的大写组成的字符串
13 "^[a-z]+$" //由26个英文字母的小写组成的字符串
14 "^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
15 "^\w+$" //由数字、26个英文字母或者下划线组成的字符串
16 "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
17 "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
18 /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
19 /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
20 "^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$" //Emil
21 "(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码
22 "^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址 

参考来源:http://blog.csdn.net/microlchen/article/details/7445846

3、示例

现在通过整理一些资料编写了一个正则表达式验证的类库,供以后需要使用。

a、验证类库,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System;
using System.Text.RegularExpressions; 

namespace cxlib
{
    /// <summary>
    /// Regexlib 的摘要说明。
    /// </summary>
    public class CxRegexLib
    {
        public CxRegexLib()
        {
          //
          // TODO: 在此处添加构造函数逻辑
          //
        } 

        //验证Email地址
        public bool IsValidEmail(string strIn)
        {
            // Return true if strIn is in valid e-mail format.
            return Regex.IsMatch(strIn, "^\\s*([A-Za-z0-9_-]+(\\.\\w+)*@(\\w+\\.)+\\w{2,5})\\s*$");
        } 

        //dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。
        public string MDYToDMY(String input)
        {
            return Regex.Replace(input,"//b(?//d{1,2})/(?//d{1,2})/(?//d{2,4})//b","${day}-${month}-${year}");
        } 

        //验证是否为小数
        public bool IsValidDecimal(string strIn)
        {
            return Regex.IsMatch(strIn,"^[0]{0,1}[.]{1}[0-9]{1,}$");
        }
        //验证两位小数
        public bool Is2Decimal(string str_decimal)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_decimal, @"^[0-9]*[.]{1}[0-9]{2}$");
        }
        //验证一年的12个月
        public bool IsMonth(string str_Month)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_Month, @"^(0?[[1-9]|1[0-2])$");
        }

        //验证一个月的31天
        public bool IsDay(string str_day)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_day, @"^((0?[1-9])|((1|2)[0-9])|30|31)$");
        }

        //验证是否为电话号码
        public bool IsValidTel(string strIn)
        {
            return Regex.IsMatch(strIn,@"(/d+-)?(/d{4}-?/d{7}|/d{3}-?/d{8}|^/d{7,8})(-/d+)?");
        } 

        //验证年月日
        public bool IsValidDate(string strIn)
        {
          return Regex.IsMatch(strIn,@"^2/d{3}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[1-2]/d|3[0-1])(?:0?[1-9]|1/d|2[0-3]):(?:0?[1-9]|[1-5]/d):(?:0?[1-9]|[1-5]/d)$");
        } 

        //验证后缀名
        public bool IsValidPostfix(string strIn)
        {
          return Regex.IsMatch(strIn,@"/.(?i:gif|jpg)$");
        } 

        //验证字符是否在4至12之间
        public bool IsValidByte(string strIn)
        {
          return Regex.IsMatch(strIn,@"^[a-z]{4,12}$");
        } 

        //验证IP
        public bool IsValidIp(string strIn)
        {
            return Regex.IsMatch(strIn,@"^(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])/.(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])/.(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])/.(/d{1,2}|1/d/d|2[0-4]/d|25[0-5])$");
        }
        // 验证输入汉字
        public bool IsChinese(string str_chinese)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_chinese, @"^[/u4e00-/u9fa5],{0,}$");
        }

        //验证输入字符串 (至少8个字符)
        public bool IsLength(string str_Length)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_Length, "^.{8,}$");
        }

        //验证数字输入
        public bool IsNumber(string str_number)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_number, "^[0-9]+$");
        }

        //验证整数
        public bool IsInteger(string str_number)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_number, "^[-,+]?[0-9]+$");
        }

        //验证手机
        public bool IsCellphoneNum(string str_number)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_number, "^[1]{1}[0-9]{10}$");
        }
        //  验证密码长度 (6-18位)
        public bool IsPasswLength(string str_Length)
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_Length, "^/d{6,18}$");
        }

    }
}

b、调用代码,如下所示:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using cxlib;

namespace TestInputValidation
{
    public partial class Form1 : Form
    {
        CxRegexLib cxregex;
        public Form1()
        {
            InitializeComponent();
            cxregex = new CxRegexLib();
        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            bool flag = cxregex.IsValidEmail(textBox1.Text.Trim());
            if (flag == false)
            {
                toolStripStatusLabelResult.Text = "邮箱格式不正确!";
            }else
            {
                toolStripStatusLabelResult.Text = "邮箱格式正确!";
            }
        }

        private void textBox2_Leave(object sender, EventArgs e)
        {
            bool flag = cxregex.IsValidDecimal(textBox2.Text.Trim());
            if (flag == false)
            {
                toolStripStatusLabelResult.Text = "不是小数!";
            }
            else
            {
                toolStripStatusLabelResult.Text = "这是小数!";
            }
        }

        private void textBox3_Leave(object sender, EventArgs e)
        {
            bool flag = cxregex.Is2Decimal(textBox3.Text.Trim());
            if (flag == false)
            {
                toolStripStatusLabelResult.Text = "不是保留两位小数!";
            }
            else
            {
                toolStripStatusLabelResult.Text = "保留两位小数!";
            }
        }

        private void textBox4_Leave(object sender, EventArgs e)
        {
            bool flag = cxregex.IsNumber(textBox4.Text.Trim());
            if (flag == false)
            {
                toolStripStatusLabelResult.Text = "不是数字!";
            }
            else
            {
                toolStripStatusLabelResult.Text = "这是数字!";
            }
        }

        private void textBox5_Leave(object sender, EventArgs e)
        {
            bool flag = cxregex.IsInteger(textBox5.Text.Trim());
            if (flag == false)
            {
                toolStripStatusLabelResult.Text = "不是整数!";
            }
            else
            {
                toolStripStatusLabelResult.Text = "这是整数!";
            }
        }

        private void textBox6_Leave(object sender, EventArgs e)
        {
            bool flag = cxregex.IsCellphoneNum(textBox6.Text.Trim());
            if (flag == false)
            {
                toolStripStatusLabelResult.Text = "不是手机!";
            }
            else
            {
                toolStripStatusLabelResult.Text = "这是手机!";
            }
        }
    }
}

c、运行程序,界面如下图所示:

  通过Tab键,离开编辑框后进行正确性校验。

d、代码工程:

  TestInputValidation.zip

时间: 2024-10-15 07:03:39

C# 基于正则表达式的字符串验证的相关文章

基于Token的身份验证——JWT(转)

本文转自:http://www.cnblogs.com/zjutzz/p/5790180.html 感谢作者 初次了解JWT,很基础,高手勿喷.基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校验部分 怎样生成A? header格式为: { "typ

WebApi_基于Token的身份验证——JWT(z)

基于Token的身份验证——JWT JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JWT头部信息header加密得到B由JWT用到的身份验证信息json数据加密得到C由A和B加密得到,是校验部分 怎样生成A? header格式为: { "typ": "JWT", "alg": "HS256" } 它就是一个json串,两个字段是必须的,不能多也不能少.alg字段指定了生成C的算法

如何使用JavaScript和正则表达式进行数据验证

利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作,下面与大家分享下如何使用JavaScript和正则表达式进行数据验证,感兴趣的朋友可以参考下哈 数据验证是网络应用软件从客户端接受数据的重要步骤,毕竟,您需要在使用客户数据前确保其符合预期的格式.在网络应用程序中,您可以选择使用特定平台的工具,比如ASP.NET.JSP等等,或者您可以利用客户端JavaScript的优势,JavaScript中的正则表达式可以简化数据验证的工作. 正则表达式 正则表达

js常用正则表达式表单验证代码

方法一: var re=/正则表达式/; re.test($("txtid").val()) 方法二: $("txtid").val.match(/正则表达式/): 附: 验证数字的正则表达式集(转载) 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证有两位小数的正实数:^[0-9]+(.[0-9]{2})?$ 验证

js 常用正则表达式表单验证代码

js 常用正则表达式表单验证代码 js 常用正则表达式表单验证代码,以后大家就可以直接使用了. 正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下:测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证.替换文本.可以在文档中使用一个正则表达式来标识特定文字,然后可以全部将其删除,或者替换为别的文字.根据模式匹配从字符串中提取一个子字符串.可以用来在文本或输入字段中

正则表达式的各种验证方法

正则表达式的各种验证方法 好多种方式.可以用正则表达式,可以用其他过滤方式. using System.Text.RegularExpressions; /// <summary> /// 使用指定正则进行验证 /// </summary> /// <param name="regex">正则表达式</param> /// <param name="validateString">待验证字符</par

正则表达式表单验证实例代码详解

正则表达式表单验证实例代码详解 这篇文章主要介绍了正则表达式表单验证实例详解的相关资料,大家可以参考下.正则表达式表单验证具体内容如下: 首先给大家解释一些符号相关的意义 * 匹配前面的子表达式零次或多次: ^ 匹配输入字符串的开始位置:$匹配输入字符串的结束位置 1. /^$/ 这个是个通用的格式. 2. 里面输入需要实现的功能. \d 匹配一个数字字符,等价于[0-9] + 匹配前面的子表达式一次或多次: ?匹配前面的子表达式零次或一次: 下面通过一段代码给大家分析表单验证正则表达式,具体代

javascript正则表达式和字符串RegExp

这篇文章主要介绍了javascript正则表达式和字符串RegExp and String(一)的相关资料,需要的朋友可以参考下 前言 正则表达式是javascript非常重要和常用的功能,在jquery等大型框架中用的非常频繁,最近抽时间学习了解了相关知识,记录下来与需要的朋友分享. 思维导图: RegExp(正则表达式)的创建方式 可以通过两种方式创建一个RegExp,具体如下: 通过/-./的方式来创建正则表达式(注意: /--/两边是没有单引号或双引号的) 通过RegExp构造方法来创建

正则表达式和字符串处理

正则表达式和字符串处理 来源 https://www.cnblogs.com/helloczh/articles/1648029.html 第一章        正则表达式概述 正则表达式(Regular Expression)起源于人类神经系统的研究.正则表达式的定义有以下几种: l         用某种模式去匹配一类字符串的公式,它主要是用来描述字符串匹配的工具. l         描述了一种字符串匹配的模式.可以用来检查字符串是否含有某种子串.将匹配的子串做替换或者从中取出符合某个条件