前言

最近做了一个小需求,新建用户时输入的密码必须包含数字、小写字母、大写字符以及特殊字符,目的是为了增强密码的强度,如果没有其中一项,就需要弹出窗口进行提示。

正则表达式

         对于此类字符串匹配的问题,用正则表达式(Regular Expression)来校验最好不过了。

正则表达式的使用方法有很多,如C Regex、C++ Regex以及boost::regex等等,本文使用VC++测试,主要使用ATL中两个模板类CAtlRegExp和CAtlREMatchContext。

下载ATL Server Library and Tools

VS2008中由于将ALT项目的部分代码剥离出去成为了独立的开源项目,需要用到ALT中正则表达式等功能就需要手动下载。

下载:http://atlserver.codeplex.com/

下载后解压到指定位置,将include目录加入VS工程的包含目录中去。

      

密码校验

1、  使用VS2008,新建基于对话框的MFC应用程序PassWordRegex;

2、  新建编辑框(IDC_EDIT_PASSWORD),设置属性password为True;

3、  为密码编辑框关联变量CString m_strPassWord;

4、  添加【OK】按钮响应如下:

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
void CPassWordRegexDlg::OnBnClickedOk()
{
    UpdateData();
    m_strPassWord.TrimLeft();
    m_strPassWord.TrimRight();
    //密码为空校验
    if (m_strPassWord.IsEmpty())
    {
        AfxMessageBox(_T("密码为空!"));
        return;
    }
    
    //密码正则表达式校验
    if(!ChkPassWordEX())
    {
        return;
    }   
    OnOK();

5、  添加密码正则表达式校验过程

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
BOOL CPassWordRegexDlg::ChkPassWordEX()
{
    CAtlRegExp<> reExp;
    CAtlREMatchContext<> mcMatch;
    REParseError status = REPARSE_ERROR_OK;
    //数字
    status = reExp.Parse(_T(".*[0-9].*"));
    if (REPARSE_ERROR_OK != status)
    {
        return FALSE;
    }
    
    if (!reExp.Match(m_strPassWord, &mcMatch))
    {
        AfxMessageBox(_T("密码中必须包含数字!"));
        return FALSE;
    }
    //小写字母
    status = reExp.Parse(_T(".*[a-z].*"));
    if (REPARSE_ERROR_OK != status)
    {
        return FALSE;
    }
    if (!reExp.Match(m_strPassWord, &mcMatch))
    {
        AfxMessageBox(_T("密码中必须包含小写字母!"));
        return FALSE;
    }
    
    //大写字母
    status = reExp.Parse(_T(".*[A-Z].*"));
    if (REPARSE_ERROR_OK != status)
    {
        return FALSE;
    }
    if (!reExp.Match(m_strPassWord, &mcMatch))
    {
        AfxMessageBox(_T("密码中必须包含大写字母!"));
        return FALSE;
    }
    
    //特殊字符
    status = reExp.Parse(_T(".*[~!@#$%^&*].*"));
    if (REPARSE_ERROR_OK != status)
    {
        return FALSE;
    }

if (!reExp.Match(m_strPassWord, &mcMatch))
    {
        AfxMessageBox(_T("密码中必须包含特殊字符!"));
        return FALSE;
    }

return TRUE;
}

注意:在PassWordRegexDlg.cpp中加入头文件:#include <atlrx.h>

6、编译运行

  Demo下载http://pan.baidu.com/s/1o7EQPFs

使用CAtlRegExp类进行密码校验的更多相关文章

  1. 密码校验正则表达式(java 环境)

    密码校验需求: 1) 密码控制只能输入字母.数字.特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)2) 长度 6-16 位,必须包括字母.数字.特殊 ...

  2. 用servlet进行用户名和密码校验

    用servlet进行用户名和密码校验 先来看看效果-- 这里为了方便查看,密码框并没有使用password输入框,而是使用了text框 总体来说思路还是比较简单 1.先来个form,配置好action ...

  3. 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持

    前言: 我看了下shiro好像默认不支持复杂表达式的权限校验, 它需要开发者自己去做些功能扩展的工作. 针对这个问题, 同时也会为了弥补上一篇文章提到的支持复杂表示需求, 特地尝试写一下解决方法. 本 ...

  4. 用servlet进行用户名和密码校验01

    用servlet进行用户名和密码校验01 编写一个servlet进行用户名和密码校验,获取登录页面的用户名密码,并显示出来 1.工作目录结构 2.首先是一个login.html,包含非常简单的登录表单 ...

  5. MySQL_(Java)使用JDBC创建用户名和密码校验查询方法

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL数据库中的数据,数据库名garysql,表名garytb,数据库中存在的用户表 通过JDBC对MySQL中的数据用户名和密码 ...

  6. 类Shiro权限校验框架的设计和实现

    前言: 之前简单集成了springmvc和shiro用于后台管理平台的权限控制, 设计思路非常的优美, 而且编程确实非常的方便和简洁. 唯一的不足, 我觉得配置稍有些繁琐. 当时我有个小想法, 觉得可 ...

  7. 关于类属性值校验的一点记录 【知识点Attribute】

    好久没有进来了,之前励志坚持写博客,记录自己在做代码搬运工这段历程中点滴,可是仅仅只坚持了几天,就放弃了!果然是,世上无难事,只要肯放弃!哈哈……闲话不多说,开始进入正题,给自己留点笔记,避免将来老了 ...

  8. mysql 5.7安装密码校验插件validate_password

    在使用服务器插件之前,必须将它们加载到服务器中.MySQL支持在服务器启动和运行时加载插件.还可以在启动时控制加载插件的激活状态,并在运行时卸载它们.在加载插件时,可以从INFORMATION_SCH ...

  9. mysql 5.7密码策略和安装密码校验插件validate_password

    当执行sql:SHOW VARIABLES LIKE 'validate_password%';提示empty,说明没有安装密码插件 1.查看当前mysql安装的插件信息 mysql> show ...

随机推荐

  1. UISearchbar去除背景色的方法,适合iOS5/6/7/8.0beta

    通常使用UISearchbar都须要去除其背景色来与自己的界面风格保持协调,可是UISearchbar的设计随着iOS版本号的升级不断地在发生着变化.以下我们通过分析UISearchbar在各个iOS ...

  2. linux(ubuntu) 查看系统设备信息

    ubuntu查看版本命令 方法一: 在终端中执行下列指令: cat /etc/issue 方法二: 使用 lsb_release 命令也可以查看 Ubuntu 的版本号,与方法一相比,内容更为详细. ...

  3. JAVA编译器常量

    编译器常量的特点就是:它的值在编译期就可以确定.比如: final int i = 5; 再傻的编译器也能在编译时看出它的值是5,不需要到运行时.对于运行时常量,它的值虽然在运行时初始化后不再发生变化 ...

  4. IIS发布.net core mvc web站点

    这里只有操作步骤! 第一.查看IIS是否安装了 AspNetCoreModule,查看路径:IIS->模块 查看 安装步骤 下载网址:https://www.microsoft.com/net/ ...

  5. 网页中PNG透明背景图片的完美应用

    PNG 图片在网站设计中是不可或缺的部分,最大的特点应该在于 PNG 可以无损压缩,而且还可以设置透明,对于增强网站的图片色彩效果有重要的作用. 但为什么 PNG 图片却没有 GIF 和 JPG 图片 ...

  6. 【实用代码片段】将json数据绑定到html元素 (转)

    jQuery扩展 jQuery.fn.extend({ 'jsonBind':function(json){ var dom=this; dom.find('[json-bind]').each(fu ...

  7. C#删除xml指定节点

  8. C++ string long double转char*

    long long q = 10; ]; char* output; sprintf(s, "%ld", q); output = s; double ]; sprintf(s1, ...

  9. Atitit. Dwr 抛出异常error解决方案

    Atitit. Dwr 抛出异常error解决方案 1. Dwr3的处理机制..setErrorHandler 1 2. remote Mteh  try catch 1 3. 林吧,子好java 处 ...

  10. [elk]logstash统计api访问失败率

    处理原始日志 日志从moogoo导出来的 { "mobile" : "13612345678", "isp" : "中国移动_广东 ...