日期:2014-05-17  浏览次数:20835 次

验证(C#和正则表达式)

我们经常会需要验证字符串的格式,比如密码长度范围、电子邮件格式、固定电话号码和手机号码格式等,这个时候我们经常会需要用到正则表达式。但是正则表达式用起来性能会低一点,所以在需要验证的时候能不使用正则表达式还是尽量不要使用正则表达式。

下面贴出来我写的一个验证类,里面包含了一些常用的验证。在这些验证里,能不用正则表达式验证的都尽量没有用正则表达式,但是在这种情况下都尽量把用正则表达式验证的代码也写在了方法里面做了注释。

正则表达式验证需要引用System.Text.RegularExpressions命名空间。

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

using System.Text.RegularExpressions;//引用验证的命名空间

namespace XClassLibrary
{
    public class Validator
    {
        #region 匹配方法
        /// <summary>
        /// 验证字符串是否匹配正则表达式描述的规则
        /// </summary>
        /// <param name="inputStr">待验证的字符串</param>
        /// <param name="patternStr">正则表达式字符串</param>
        /// <returns>是否匹配</returns>
        public static bool IsMatch(string inputStr, string patternStr)
        {
            Regex regex = new Regex(patternStr);
            return regex.IsMatch(inputStr);
        }

        /// <summary>
        /// 验证字符串是否匹配正则表达式描述的规则
        /// </summary>
        /// <param name="inputStr">待验证的字符串</param>
        /// <param name="patternStr">正则表达式字符串</param>
        /// <param name="ifIgnoreCase">匹配时是否不区分大小写</param>
        /// <returns>是否匹配</returns>
        //public static bool IsMatch(string inputStr, string patternStr, bool ifIgnoreCase)
        //{
        //    Regex regex = null;
        //    if (ifIgnoreCase)//如果要求不区分大小写
        //        regex = new Regex(patternStr, RegexOptions.IgnoreCase);//指定不区分大小写的匹配
        //    else
        //        regex = new Regex(patternStr);
        //    return regex.IsMatch(inputStr);
        //}

        /// <summary>
        /// 验证字符串是否匹配正则表达式描述的规则
        /// </summary>
        /// <param name="inputStr">待验证的字符串</param>
        /// <param name="patternStr">正则表达式字符串</param>
        /// <param name="ifValidateWhiteSpace">是否验证空白字符串</param>
        /// <returns>是否匹配</returns>
        public static bool IsMatch(string inputStr, string patternStr, bool ifValidateWhiteSpace)
        {
            if (!ifValidateWhiteSpace && string.IsNullOrWhiteSpace(inputStr))
                return false;//如果不要求验证空白字符串而此时传入的待验证字符串为空白字符串,则不匹配
            Regex regex = new Regex(patternStr);
            return regex.IsMatch(inputStr);
        }

        /// <summary>
        /// 验证字符串是否匹配正则表达式描述的规则
        /// </summary>
        /// <param name="inputStr">待验证的字符串</param>
        /// <param name="patternStr">正则表达式字符串</param>
        /// <param name="ifIgnoreCase">匹配时是否不区分大小写</param>
        /// <param name="ifValidateWhiteSpace">是否验证空白字符串</param>
        /// <returns>是否匹配</returns>
        public static bool IsMatch(string inputStr, string patternStr, bool ifIgnoreCase, bool ifValidateWhiteSpace)
        {
            if (!ifValidateWhiteSpace && string.IsNullOrWhiteSpace(inputStr))
                return false;//如果不要求验证空白字符串而此时传入的待验证字符串为空白字符串,则不匹配
            Regex regex = null;
            if (ifIgnoreCase)
                regex = new Regex(patternStr, RegexOptions.IgnoreCase);//指定不区分大小写的匹配
            else
                regex = new Regex(patternStr);
            return regex.IsMatch(inputStr);
        }
        #endregion

        #region 验证方法
        /// <summary>
        /// 验证数字(double类型)
        /// [可以包含负号和小数点]
        /// </summary>
        /// <param name="input">待验证的字符串</param>
        /// <returns>是否匹配</returns>
        public static bool IsNumberWithSignAndPoint(string input)
        {
            //string pattern = @"^-?\d+$|^(-?\d+)(\.\d+)?$";
            //return IsMatch