昵称验证

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,280评论 19 139
  • 文章转载地址: http://www.open-open.com/code/view/1430625516632 ...
    得起一个清新脱俗的名字阅读 2,230评论 1 3
  • 初衷:看了很多视频、文章,最后却通通忘记了,别人的知识依旧是别人的,自己却什么都没获得。此系列文章旨在加深自己的印...
    DCbryant阅读 4,106评论 0 20
  • 2017年7月13日 早晨6点就醒了,再也睡不着,精力却很充沛。 一日之计在于晨,既然起床这么早,只好浇浇花,背背...
    如云似烟阅读 384评论 0 0
  • 有人说:想抓住一个女人的心❤,就要先抓住她的胃⋯⋯呵⋯⋯我说错了吗?我老婆喜欢吃,所以我做了。 红辣椒炒豆豉 红辣...
    490826ff7d85阅读 384评论 15 2