最近一直是负责项目的版署版本更新,从分支拉出来,和主干相去甚远了。
最近的遇到问题和方法总结在此。
版署要求不能有繁体字。
Update---内容在底部
之前在主干做聊天的时候,为了做中文字长度判断,是中文长度为2,字母数字长度为1,做了使用正则表达。
在之前博客中提到正则表达式的使用。 http://blog.csdn.net/u011611902/article/details/49868447
[\u4E00-\u9FA5]用来判断中文字,但是这里面包括了繁体字。
几个主要非英文语系字符范围
2E80~33FFh:中日韩符号区。收容康熙字典部首、中日韩辅助部首、注音符号、日本假名、韩文音符,中日韩的符号、标点、带圈或带括符文数字、月份,以及日本的假名组合、单位、年号、月份、日期、时间等。
3400~4DFFh:中日韩认同表意文字扩充A区,总计收容6,582个中日韩汉字。
4E00~9FFFh:中日韩认同表意文字区,总计收容20,902个中日韩汉字。
A000~A4FFh:彝族文字区,收容中国南方彝族文字和字根。
AC00~D7FFh:韩文拼音组合字区,收容以韩文音符拼成的文字。
F900~FAFFh:中日韩兼容表意文字区,总计收容302个中日韩汉字。
FB00~FFFDh:文字表现形式区,收容组合拉丁文字、希伯来文、阿拉伯文、中日韩直式标点、小符号、半角符号、全角符号等。
比如需要匹配所有中日韩非符号字符,那么正则表达式应该是^[\u3400-\u9FFF]+$
需要注意的是论坛里说的^[\u4E00-\u9FA5]+$这是专门用于匹配简体中文的正则表达式, 实际上繁体字也在里面, 我用测试器测试了下'中華人民共和國', 也通过了, 当然, ^[\u4E00-\u9FFF]+$也是一样的结果
public static Encoding gb = Encoding.GetEncoding("gb2312");
public static boolIsChineseChar(char ch)
{
string str = ch.ToString();
byte[] gb2312Bytes = gb.GetBytes(str);
// only 1 or 2
if(gb2312Bytes.Length == 2) // double bytes char.
{
if(gb2312Bytes[0] >= 0xB0 && gb2312Bytes[0] <= 0xF7
&& gb2312Bytes[1] >= 0xA1 && gb2312Bytes[1] <= 0xFE)
{
return true;
}
else
{
return false;
}
}
else return false;
}
using System;
using UnityEngine;
using System.Collections;
public class StringTools
{
public static bool CalaculateChineseWord(string str,SimplifiedChinese charset)
{
for (int i = 0; i < str.Length; i++)
{
if (!isCh_sm(str[i], charset))
{
return false;
}
}
return true;
}
public static bool isCh_sm(char ch, SimplifiedChinese charset)
{
uint c = (uint) ch;
if (Array.IndexOf(charset.UnicodeSc, c) != -1)
return true;
return false;
}
}