C#字符串的常用操作工具类代码分享

实现以下功能:

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

C#代码:

代码如下:

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("\"", "\\\"");
    }
}

(0)

相关推荐

  • C#实现将类的内容写成JSON格式字符串的方法

    本文实例讲述了C#实现将类的内容写成JSON格式字符串的方法.分享给大家供大家参考.具体如下: 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //需要引用 Newtonsoft.Js

  • c#字符串值类型与引用类型比较示例

    复制代码 代码如下: classProgram{    staticvoid Main() {        int a = 9;    //给变量a赋值为9        int b = a;   //将a的副本给变量b        b = 10;        Console.WriteLine(string.Format("a={0},b={1}", a, b));        Person ZS = newPerson();       //张三        ZS.Age

  • 在C#及.NET框架中使用StringBuilder类操作字符串的技巧

    但如果性能的优劣很重要,则应该总是使用 StringBuilder 类来串联字符串.下面的代码使用 StringBuilder 类的 Append 方法来串联字符串,因此不会有 + 运算符的链接作用产生. class StringBuilderTest { static void Main() { string text = null; // Use StringBuilder for concatenation in tight loops. System.Text.StringBuilder

  • C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法

    方式一:Convert.ToDateTime(string) 复制代码 代码如下: Convert.ToDateTime(string) 注意:string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方式二:Convert.ToDateTime(string, IFormatProvider) 复制代码 代码如下: DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo(); dtFormat

  • C#实现实体类与字符串互相转换的方法

    本文实例讲述了C#实现实体类与字符串互相转换的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Text; namespace PackDLL.Data.ConvertData { /// <summary> /// 实体类.字符串互相转换 /// </summary> public class PackReflectionEntity<T> { //

  • 非常实用的C#字符串操作处理类StringHelper.cs

    一个非常好的C#字符串操作处理类StringHelper.cs,具体内容如下 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:http://www.sufeinet.com/thread-655-1-1.html /// </summary> using System; using System.Collections.Generic; using System.Text; using

  • C#实现简易的加密、解密字符串工具类实例

    本文实例讲述了C#实现简易的加密.解密字符串工具类.分享给大家供大家参考.具体如下: 这里的类CypherHelper是一个用于加密.解密字符串的工具类~~~,适合于方便地加密.解密长度较短的密码等字符串(C#里面已经有了库System.Security.Cryptography,对于比较长的字符串或流来说是一个更好的选择) 类CypherHelper代码: class CypherHelper { /// <summary> /// 加密字符串 /// </summary> //

  • C#生成不重复随机字符串类

    本文实例讲述了C#生成不重复随机字符串类.分享给大家供大家参考.具体如下: 这个C#类用于随机产生不重复的字符串,可以指定字符串范围,可以指定要产生字符串的长度 using System; namespace DotNet.Utilities { public class RandomOperate { // 一:随机生成不重复数字字符串 private int rep = 0; public string GenerateCheckCodeNum(int codeCount) { string

  • C#实现的字符串相似度对比类

    本类适用于比较2个字符的相似度,代码如下: using System; using System.Collections.Generic; using System.Text; public class StringCompute { #region 私有变量 /// <summary> /// 字符串1 /// </summary> private char[] _ArrChar1; /// <summary> /// 字符串2 /// </summary>

  • C#中使用强制类型实现字符串和ASCII码之间的转换

    C#貌似没有专门用于ASCII码转字符或字符转ASCII码的系统函数,所以小编这里就借用一下强制类型转换来实现ASCII码与字符之间的互转. 所谓的ASCII码,即American Standard Code for Information Interchange,美国信息互换标准代码的简写,它是基于拉丁字母的编码系统,也是当前最为通用的单字节编码系统.本文讲述在C#中如何实现字母或 数字等字符如何转换为ASCII编码,同时也可以将ASCII编码转换为字符. 一.将字符转换为ASCII码(数字)

随机推荐