利用正則表示式計算含有中文的字串長度
using System.Text.RegularExpressions;
namespace LangZi
{
/**//// <summary>
/// StringHelper 的摘要說明。
/// </summary>
public class StringHelper
{
public StringHelper()
{
//
// TODO: 在此處新增建構函式邏輯
//
}
GetLength#region GetLength
/**//// <summary>
/// 返回包含中文字元的字串長度
/// C# 的string.Length中中文字只做1位統計,所以要將其轉換為2位
/// </summary>
/// <param name="strSource">要統計長度的字串變數</param>
/// <returns>字串長度</returns>
public static int GetLength(string strSource)
{
Regex regex = new Regex("[/u4e00-/u9fa5]+", RegexOptions.Compiled);
int nLength = strSource.Length;
for(int i=0; i<strSource.Length; i++)
{
if (regex.IsMatch(strSource.Substring(i,1)))
{
nLength++;
}
}
return nLength;
}
#endregion
}
}
匹配任何包含中文的字串
regcn=/[/u4e00-/u9fa5]/;
匹配諸如“xxx-xxxxxxx”的電話號碼:
regphone=/^[0-9]/-[0-9]$/;
手機號碼:
regmobile=/^13[0-9]{8}/;
using System;
using System.Text.RegularExpressions;
namespace LangZi
{
/// <summary>
/// StringHelper 的摘要說明。
/// </summary>
public class StringHelper
{
public StringHelper()
{
//
// TODO: 在此處新增建構函式邏輯
//
}
#region GetLength
/// <summary>
/// 返回包含中文字元的字串長度
/// C# 的string.Length中中文字只做1位統計,所以要將其轉換為2位
/// </summary>
/// <param name="strSource">要統計長度的字串變數</param>
/// <returns>字串長度</returns>
public static int GetLength(string strSource)
{
Regex regex = new Regex("[/u4e00-/u9fa5]+", RegexOptions.Compiled);
int nLength = strSource.Length;
for (int i = 0; i < strSource.Length; i++)
{
if (regex.IsMatch(strSource.Substring(i, 1)))
{
nLength++;
}
}
return nLength;
}
#endregion
}
}
使用:
string source;
int length;
source = "123";
length = LanZi.StringHelper.GetLength(source);
Console.WriteLine(length); // 3
source = "12叄";
length = LangZi.StringHelper.GetLength(source);
Console.WriteLine(length); // 4 因為叄是中文,一箇中文返回的長度是2
土人用最土的辦法,以求實現自己的目標,看了銀河兄的C#中的字元編碼問題 一文,發現有更好更完善的方法:
using System;
using System.Text;
namespace LangZi
{
/// <summary>
/// StringHelper 的摘要說明。
/// </summary>
public class StringHelper
{
public StringHelper()
{
//
// TODO: 在此處新增建構函式邏輯
//
}
#region GetLength
/// <summary>
/// 返回包含中文字元的字串長度
/// C# 的string.Length中中文字只做1位統計,所以要將其轉換為2位
/// </summary>
/// <param name="strSource">要統計長度的字串變數</param>
/// <returns>字串長度</returns>
public static int GetLength(string strSource)
{
return Encoding.GetEncoding("GB18030").GetBytes(strSource).Length;
}
#endregion
}
複製 儲存
public static int GetLength(string strSource)
{
return Regex.Matches(strSource, "[/u4e00-/u9fa5]").Count + strSource.Length;
}
複製 儲存
string str = "你好中國";
int length = str.ToCharArray().Length;