使用CAtlRegExp类进行密码校验
前言
最近做了一个小需求,新建用户时输入的密码必须包含数字、小写字母、大写字符以及特殊字符,目的是为了增强密码的强度,如果没有其中一项,就需要弹出窗口进行提示。
正则表达式
对于此类字符串匹配的问题,用正则表达式(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】按钮响应如下:
|
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、 添加密码正则表达式校验过程
|
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)) return TRUE; |
注意:在PassWordRegexDlg.cpp中加入头文件:#include <atlrx.h>
6、编译运行

Demo下载:http://pan.baidu.com/s/1o7EQPFs
使用CAtlRegExp类进行密码校验的更多相关文章
- 密码校验正则表达式(java 环境)
密码校验需求: 1) 密码控制只能输入字母.数字.特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)2) 长度 6-16 位,必须包括字母.数字.特殊 ...
- 用servlet进行用户名和密码校验
用servlet进行用户名和密码校验 先来看看效果-- 这里为了方便查看,密码框并没有使用password输入框,而是使用了text框 总体来说思路还是比较简单 1.先来个form,配置好action ...
- 类Shiro权限校验框架的设计和实现(2)--对复杂权限表达式的支持
前言: 我看了下shiro好像默认不支持复杂表达式的权限校验, 它需要开发者自己去做些功能扩展的工作. 针对这个问题, 同时也会为了弥补上一篇文章提到的支持复杂表示需求, 特地尝试写一下解决方法. 本 ...
- 用servlet进行用户名和密码校验01
用servlet进行用户名和密码校验01 编写一个servlet进行用户名和密码校验,获取登录页面的用户名密码,并显示出来 1.工作目录结构 2.首先是一个login.html,包含非常简单的登录表单 ...
- MySQL_(Java)使用JDBC创建用户名和密码校验查询方法
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL数据库中的数据,数据库名garysql,表名garytb,数据库中存在的用户表 通过JDBC对MySQL中的数据用户名和密码 ...
- 类Shiro权限校验框架的设计和实现
前言: 之前简单集成了springmvc和shiro用于后台管理平台的权限控制, 设计思路非常的优美, 而且编程确实非常的方便和简洁. 唯一的不足, 我觉得配置稍有些繁琐. 当时我有个小想法, 觉得可 ...
- 关于类属性值校验的一点记录 【知识点Attribute】
好久没有进来了,之前励志坚持写博客,记录自己在做代码搬运工这段历程中点滴,可是仅仅只坚持了几天,就放弃了!果然是,世上无难事,只要肯放弃!哈哈……闲话不多说,开始进入正题,给自己留点笔记,避免将来老了 ...
- mysql 5.7安装密码校验插件validate_password
在使用服务器插件之前,必须将它们加载到服务器中.MySQL支持在服务器启动和运行时加载插件.还可以在启动时控制加载插件的激活状态,并在运行时卸载它们.在加载插件时,可以从INFORMATION_SCH ...
- mysql 5.7密码策略和安装密码校验插件validate_password
当执行sql:SHOW VARIABLES LIKE 'validate_password%';提示empty,说明没有安装密码插件 1.查看当前mysql安装的插件信息 mysql> show ...
随机推荐
- Qt Multimedia Backends(多媒体后端)翻译
目录 MediaService plugins 媒体服务插件 不同后端支持的媒体播放器功能: 后端支持的摄像头(相机)功能 后端支持的音频解码功能 Audio plugins 音频插件 原文地址: Q ...
- 微信小程序项目实战之豆瓣天气
概述 微信小程序项目实战之豆瓣天气 详细 代码下载:http://www.demodashi.com/demo/10943.html 一.准备工作 1.注册微信小程序 2.在小程序设置中设置reque ...
- apache绑定多个域名
在httpd.conf里, 1.把#NameVirtualHost *:80前的注释去掉2.ServerName 127.0.0.1 修改成ServerName 72.167.11.303.#Name ...
- 10分钟学会搭建Android开发环境 Eclipse: The import android.support cannot be resolved
10分钟学会搭建Android开发环境_隋雨辰 http://v.youku.com/v_show/id_XNTE2OTI5Njg0.html?from=s1.8-1-1.2 The import a ...
- Linux命令-文件搜索命令:grep
选项: -A 数字:表示查看满足条件行后的N条记录 -B 数字:表示查看满足条件行前的N条记录 -C 数字:表示查看满足条件行前后各N条记录 more /etc/inittab 分页查看inittab ...
- C#中byte类型转换为double类型
// Initialize unmanged memory to hold the array. int size = Marshal.SizeOf(bytes[0]) * bytes.Length; ...
- Spring Cloud(三):服务提供与调用
上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注册中心,搭建一个简单的服务端注册服务,客户端去调用服务使用的案例. 案例中有三个角色:服务注册中心.服务提 ...
- <LeetCode OJ> 234. Palindrome Linked List
Total Accepted: 40445 Total Submissions: 148124 Difficulty: Easy Given a singly linked list, determi ...
- CWidgetMgr---H
/************************************************************************/ //管理部件 //部件自动根据Z顺序调整消息的优先 ...
- tableview 与 tableview cell
1.tableview cell: import Foundationimport UIKit class CjwtCell: UITableViewCell { @IBOutlet var lb_c ...