微博剩餘字數統計新浪官方演算法的C#實現,要的朋友請儲存。
參數text是本文內容。
isOutOfRange用來判斷文字是否溢出,以此來控制發送按鈕的可用狀態。
1 public static string GetContentLengthString(string text, out bool isOutOfRange) 2 { 3 text = text.Trim(); 4 text = Regex.Replace(text, "\r\n", "\n"); 5 int textLength = 0; 6 if (text.Length > 0) 7 { 8 int min = 41, max = 140, urlLen = 20; 9 var n = text;10 var r = Regex.Matches(text, @"http://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_$.+!*()/\\\,:;@&=?~#%]*)*");11 var total = 0;12 for (int m = 0, p = r.Count; m < p; m++)13 {14 var url = r[m].Value;15 var byteLen = url.Length + Regex.Matches(url, @"[^\x00-\x80]").Count;16 if (Regex.IsMatch(url, @"^(http://t.cn)"))17 {18 continue;19 }20 else if (Regex.IsMatch(url, @"^(http:\/\/)+(weibo.com|weibo.cn)"))21 {22 total += byteLen <= min ? byteLen : (byteLen <= max ? urlLen : (byteLen - max + urlLen));23 }24 else25 {26 total += byteLen <= max ? urlLen : (byteLen - max + urlLen);27 }28 n = n.Replace(url, "");29 }30 textLength = (int)Math.Ceiling((total + n.Length + Regex.Matches(n, @"[^\x00-\x80]").Count) / 2.00d);31 }32 33 int textRemainLength = 140 - textLength;34 string template = string.Empty;35 if (textRemainLength >= 0)36 {37 template = "還可以輸入{0:N0}個字";38 isOutOfRange = false;39 }40 else41 {42 template = "已經超過了{0:N0}個字";43 44 isOutOfRange = true;45 }46 return string.Format(template, Math.Abs(textRemainLength));47 }
執行效果