一般會有要求指定長度的昵稱合法性驗證,比如要求6-18位字符、數字和下劃線。通常的做法會是使用正則表達式,但是英文字符占一位(1byte),而中文占兩位(2byte),這樣在驗證的時候不好統一。可以采用先計算字符串長度,然后用正則表達式匹配是否合法:
驗證字符串長度
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;
}
正則表達式:
private Regex regexNickName = new Regex(@"^[A-Za-z0-9_\u4e00-\u9fff\uf900-\ufa2d]");
驗證過程:
private bool CheckNickName()
{
var checkResult = false;
var nameLength = GetStringLength(newNickName);
if (nameLength >= 6 && nameLength <= 16 && regexNickName.IsMatch(newNickName))
{
checkResult = true;
}
return checkResult;
}
這里有一個問題是只能驗證帶中文及英文字母的,其它古怪字符沒有包含在檢測字符里面