一般會(huì)有要求指定長(zhǎng)度的昵稱合法性驗(yàn)證封恰,比如要求6-18位字符矮烹、數(shù)字和下劃線越庇。通常的做法會(huì)是使用正則表達(dá)式,但是英文字符占一位(1byte)奉狈,而中文占兩位(2byte)卤唉,這樣在驗(yàn)證的時(shí)候不好統(tǒng)一∪势冢可以采用先計(jì)算字符串長(zhǎng)度桑驱,然后用正則表達(dá)式匹配是否合法:
驗(yàn)證字符串長(zhǎng)度
private int GetStringLength(string checkStr)
{
var originalStr = checkStr.ToCharArray();
var strLen = 0;
for (int i = 0; i < originalStr.Length; i++)
{
if ((int)originalStr[i] > 127)
{
strLen += 2;
}
else
{
strLen++;
}
}
return strLen;
}
正則表達(dá)式:
private Regex regexNickName = new Regex(@"^[A-Za-z0-9_\u4e00-\u9fff\uf900-\ufa2d]");
驗(yàn)證過程:
private bool CheckNickName()
{
var checkResult = false;
var nameLength = GetStringLength(newNickName);
if (nameLength >= 6 && nameLength <= 16 && regexNickName.IsMatch(newNickName))
{
checkResult = true;
}
return checkResult;
}
這里有一個(gè)問題是只能驗(yàn)證帶中文及英文字母的,其它古怪字符沒有包含在檢測(cè)字符里面