一般会有要求指定长度的昵称合法性验证,比如要求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;
}
这里有一个问题是只能验证带中文及英文字母的,其它古怪字符没有包含在检测字符里面