C#操作操作类库五(字符串的常用扩展方法)

简介: 验证字符串是否由正负号(+-)、数字、小数点构成,并且最多只有一个小数点 验证字符串是否仅由[0-9]构成 验证字符串是否由字母和数字构成 验证是否为空字符串。若无需裁切两端空格,建议直接使用 String.IsNullOrEmpty(string) 裁切字符串(中文按照两个字符计算) 裁切字符串(中文按照两个字符计算,裁切前会先过滤 Html 标签) 过滤HTML标签 获取字符串长度。
  • 验证字符串是否由正负号(+-)、数字、小数点构成,并且最多只有一个小数点
  • 验证字符串是否仅由[0-9]构成
  • 验证字符串是否由字母和数字构成
  • 验证是否为空字符串。若无需裁切两端空格,建议直接使用 String.IsNullOrEmpty(string)
  • 裁切字符串(中文按照两个字符计算)
  • 裁切字符串(中文按照两个字符计算,裁切前会先过滤 Html 标签)
  • 过滤HTML标签
  • 获取字符串长度。与string.Length不同的是,该方法将中文作 2 个字符计算。
  • 将形如 10.1MB 格式对用户友好文件大小字符串还原成真实的文件大小,单位为字节
  • 根据文件夹命名规则验证字符串是否符合文件夹格式
  • 根据文件名命名规则验证字符串是否符合文件名格式
  • 验证是否为合法的RGB颜色字符串

 

 

public  static  class ExtendedString

{

     ///   <summary>

    
///  验证字符串是否由正负号(+-)、数字、小数点构成,并且最多只有一个小数点

    
///   </summary>

    
///   <param name="str"></param>

    
///   <returns></returns>

     public  static  bool IsNumeric( this  string str)

    {

        Regex regex =  new Regex( @" ^[+-]?\d+[.]?\d*$ ");

         return regex.IsMatch(str);            

    }

 

     ///   <summary>

    
///  验证字符串是否仅由[0-9]构成

    
///   </summary>

    
///   <param name="str"></param>

    
///   <returns></returns>

     public  static  bool IsNumericOnly( this  string str)

    {

        Regex regex =  new Regex( " [0-9] ");

         return regex.IsMatch(str);

    }

 

     ///   <summary>

    
///  验证字符串是否由字母和数字构成

    
///   </summary>

    
///   <param name="str"></param>

    
///   <returns></returns>

     public  static  bool IsNumericOrLetters( this  string str)

    {

        Regex regex =  new Regex( " [a-zA-Z0-9] ");

         return regex.IsMatch(str);

    }

 

     ///   <summary>

    
///  验证是否为空字符串。若无需裁切两端空格,建议直接使用 String.IsNullOrEmpty(string)

    
///   </summary>

    
///   <param name="str"></param>

    
///   <returns></returns>

    
///   <remarks>

    
///  不同于String.IsNullOrEmpty(string),此方法会增加一步Trim操作。如 IsNullOrEmptyStr(" ") 将返回 true。

    
///   </remarks>

     public  static  bool IsNullOrEmptyStr( this  string str)

    {

         if ( string.IsNullOrEmpty(str)) {  return  true; }

         if (str.Trim().Length ==  0) {  return  true; }

         return  false;

    }

 

     ///   <summary>

    
///  裁切字符串(中文按照两个字符计算)

    
///   </summary>

    
///   <param name="str"> 旧字符串 </param>

    
///   <param name="len"> 新字符串长度 </param>

    
///   <param name="HtmlEnable"> 为 false 时过滤 Html 标签后再进行裁切,反之则保留 Html 标签。 </param>

    
///   <remarks>

    
///   <para> 注意: <ol>

    
///   <li> 若字符串被截断则会在末尾追加“...”,反之则直接返回原始字符串。 </li>

    
///   <li> 参数  <paramref name="HtmlEnable"/>  为 false 时会先调用 <see cref="uoLib.Common.Functions.HtmlFilter"/> 过滤掉 Html 标签再进行裁切。 </li>

    
///   <li> 中文按照两个字符计算。若指定长度位置恰好只获取半个中文字符,则会将其补全,如下面的例子: <br/>

    
///   <code><![CDATA[

    
///  string str = "感谢使用uoLib。";

    
///  string A = CutStr(str,4);   // A = "感谢..."

    
///  string B = CutStr(str,5);   // B = "感谢使..."

    
///  ]]> </code></li>

    
///   </ol>

    
///   </para>

    
///   </remarks>

     public  static  string CutStr( this  string str,  int len,  bool HtmlEnable)

    {

         if (str ==  null || str.Length ==  0 || len <=  0) {  return  string.Empty; }

 

         if (HtmlEnable ==  false) str = HtmlFilter(str);

         int l = str.Length;

 

         #region 计算长度

         int clen =  0; // 当前长度 

         while (clen < len && clen < l)

        {

             // 每遇到一个中文,则将目标长度减一。

             if (( int)str[clen] >  128) { len--; }

            clen++;

        }

         #endregion

 

         if (clen < l)

        {

             return str.Substring( 0, clen) +  " ... ";

        }

         else

        {

             return str;

        }

    }

     ///   <summary>

    
///  裁切字符串(中文按照两个字符计算,裁切前会先过滤 Html 标签)

    
///   </summary>

    
///   <param name="str"> 旧字符串 </param>

    
///   <param name="len"> 新字符串长度 </param>

    
///   <remarks>

    
///   <para> 注意: <ol>

    
///   <li> 若字符串被截断则会在末尾追加“...”,反之则直接返回原始字符串。 </li>

    
///   <li> 中文按照两个字符计算。若指定长度位置恰好只获取半个中文字符,则会将其补全,如下面的例子: <br/>

    
///   <code><![CDATA[

    
///  string str = "感谢使用uoLib模块。";

    
///  string A = CutStr(str,4);   // A = "感谢..."

    
///  string B = CutStr(str,5);   // B = "感谢使..."

    
///  ]]> </code></li>

    
///   </ol>

    
///   </para>

    
///   </remarks>

     public  static  string CutStr( this  string str,  int len)

    {

         if (IsNullOrEmptyStr(str)) {  return  string.Empty; }

         else

        {

             return CutStr(str, len,  false);

        }

    }

     ///   <summary>

    
///  过滤HTML标签

    
///   </summary>

     public  static  string HtmlFilter( this  string str)

    {

         if (IsNullOrEmptyStr(str)) {  return  string.Empty; }

         else

        {

            Regex re =  new Regex(RegexPatterns.HtmlTag, RegexOptions.IgnoreCase);

             return re.Replace(str,  "");

        }

    }

 

     ///   <summary>

    
///  获取字符串长度。与string.Length不同的是,该方法将中文作 2 个字符计算。

    
///   </summary>

    
///   <param name="str"> 目标字符串 </param>

    
///   <returns></returns>

     public  static  int GetLength( this  string str)

    {

         if (str ==  null || str.Length ==  0) {  return  0; }

 

         int l = str.Length;

         int realLen = l;

 

         #region 计算长度

         int clen =  0; // 当前长度 

         while (clen < l)

        {

             // 每遇到一个中文,则将实际长度加一。

             if (( int)str[clen] >  128) { realLen++; }

            clen++;

        }

         #endregion

 

         return realLen;

    }

 

     ///   <summary>

    
///  将形如 10.1MB 格式对用户友好的文件大小字符串还原成真实的文件大小,单位为字节。

    
///   </summary>

    
///   <param name="formatedSize"> 形如 10.1MB 格式的文件大小字符串 </param>

    
///   <remarks>

    
///  参见: <see cref="uoLib.Common.Functions.FormatFileSize(long)"/>

    
///   </remarks>

    
///   <returns></returns>

     public  static  long GetFileSizeFromString( this  string formatedSize)

    {

         if (IsNullOrEmptyStr(formatedSize))  throw  new ArgumentNullException( " formatedSize ");

 

         long size;

         if ( long.TryParse(formatedSize,  out size))  return size;

 

         // 去掉数字分隔符

        formatedSize = formatedSize.Replace( " , """);

 

        Regex re =  new Regex( @" ^([\d\.]+)((?:TB|GB|MB|KB|Bytes))$ ");

         if (re.IsMatch(formatedSize))

        {

            MatchCollection mc = re.Matches(formatedSize);

            Match m = mc[ 0];

             double s =  double.Parse(m.Groups[ 1].Value);

 

             switch (m.Groups[ 2].Value)

            {

                 case  " TB ":

                    s *=  1099511627776;

                     break;

                 case  " GB ":

                    s *=  1073741824;

                     break;

                 case  " MB ":

                    s *=  1048576;

                     break;

                 case  " KB ":

                    s *=  1024;

                     break;

            }

 

            size = ( long)s;

             return size;

        }

 

         throw  new ArgumentException( " formatedSize ");

    }

 

     ///   <summary>

    
///  根据文件夹命名规则验证字符串是否符合文件夹格式

    
///   </summary>

     public  static  bool IsFolderName( this  string folderName)

    {

         if (IsNullOrEmptyStr(folderName)) {  return  false; }

         else

        {

             //  不能以 “.” 开头

            folderName = folderName.Trim().ToLower();

 

             //  “nul”、“aux”、“con”、“com1”、“lpt1”不能为文件夹/文件的名称

            
//  作为文件夹,只需满足名称不为这几个就行。

             switch (folderName)

            {

                 case  " nul ":

                 case  " aux ":

                 case  " con ":

                 case  " com1 ":

                 case  " lpt1 ":

                     return  false;

                 default:

                     break;

            }

 

            Regex re =  new Regex(RegexPatterns.FolderName, RegexOptions.IgnoreCase);

             return re.IsMatch(folderName);

        }

    }

 

     ///   <summary>

    
///  根据文件名命名规则验证字符串是否符合文件名格式

    
///   </summary>

     public  static  bool IsFileName( this  string fileName)

    {

         if (IsNullOrEmptyStr(fileName)) {  return  false; }

         else

        {

            fileName = fileName.Trim().ToLower();

             //  不能以 “.” 开头

            
//  作为文件名,第一个“.” 之前不能是“nul”、“aux”、“con”、“com1”、“lpt1”

             if (fileName.StartsWith( " . ")

                || fileName.StartsWith( " nul. ")

                || fileName.StartsWith( " aux. ")

                || fileName.StartsWith( " con. ")

                || fileName.StartsWith( " com1. ")

                || fileName.StartsWith( " lpt1. ")

                )  return  false;

 

            Regex re =  new Regex(RegexPatterns.FileName, RegexOptions.IgnoreCase);

             return re.IsMatch(fileName);

        }

    }

 

     ///   <summary>

    
///  验证是否为合法的RGB颜色字符串

    
///   </summary>

    
///   <param name="color"> RGB颜色,如:#00ccff | #039 | ffffcc </param>

    
///   <returns></returns>

     public  static  bool IsRGBColor( this  string color)

    {

         if (IsNullOrEmptyStr(color)) {  return  false; }

         else

        {

            Regex re =  new Regex(RegexPatterns.HtmlColor, RegexOptions.IgnoreCase);

             return re.IsMatch(color);

        }

    }

 

     public  static  string GetJsSafeStr( this  string str)

    {

         if ( string.IsNullOrEmpty(str))

             return  string.Empty;

 

         return str.Replace( " \\ "" \\\\ ").Replace( " \" "" \\\" ");

    }

}

 

 

目录
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
2月前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
304 0
|
1月前
|
C#
Delphi可不可以制作出像c#那样的dll类库?
在Delphi中,创建DLL项目(如dll.dpr)并定义一个类TMyCls后,在另一个项目(如test.dpr)中可以引入此DLL并直接实例化和调用类的方法。然而,Delphi目前主要支持两种DLL形式:动态链接库(需显式声明exports,仅支持函数调用)和ActiveX DLL(需定义IDL接口)。这两种方式都较为繁琐。相比之下,C# 的DLL类库更为便捷,编写并编译后即可在其他项目中直接使用。
|
2月前
|
前端开发 C#
C# 一分钟浅谈:字符串操作与正则表达式
本文详细介绍C#中的字符串操作与正则表达式应用,涵盖字符串拼接、分割、查找及替换等基础操作,并通过实例讲解正则表达式的模式匹配、文本替换与分组捕获技巧。同时,文章还探讨了性能优化、复杂度管理和安全性等问题及解决策略,助你提升编程效率,应对实际开发挑战。
77 0
|
4月前
|
SQL 开发框架 前端开发
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
在C#开发中使用第三方组件LambdaParser、DynamicExpresso、Z.Expressions,实现动态解析/求值字符串表达式
|
5月前
|
C#
技术经验分享:c#拆分字符串英文和数字(包括国外所以文字)
技术经验分享:c#拆分字符串英文和数字(包括国外所以文字)
35 0
技术经验分享:c#拆分字符串英文和数字(包括国外所以文字)
|
5月前
|
算法 C#
C#开源实用的工具类库,集成超过1000多种扩展方法
C#开源实用的工具类库,集成超过1000多种扩展方法
|
5月前
|
C#
C# 中的字符与字符串
C# 中的字符与字符串
|
6月前
|
XML 移动开发 前端开发
C#HtmlAgilityPack类库再回顾
C#HtmlAgilityPack类库再回顾
57 0
|
6月前
|
C#
C#字符串
C#字符串
45 0