昵称验证

一般会有要求指定长度的昵称合法性验证,比如要求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;
}

这里有一个问题是只能验证带中文及英文字母的,其它古怪字符没有包含在检测字符里面

你可能感兴趣的:(昵称验证)