CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

ATL 正则表达式验证遇到中文出现异常!

楼主robinswan()2005-06-01 14:51:23 在 VC/MFC / ATL/ActiveX/COM 提问

用   CAtlRegExp   类验证用户输入,  
  但是当验证的字符串是中文的时候就出现未知异常,  
   
  #include   <stdafx.h>  
  #include   <atlrx.h>  
   
  int   main(int   argc,   char*   argv[])  
  {  
  CAtlRegExp<>   re;  
  re.Parse(  
  "^{[\\._a-zA-Z0-9]}+\\@{[a-zA-Z0-9-]+\\.}+{{[a-zA-Z][a-zA-Z]}|{[a-zA-Z][a-zA-Z][a-zA-Z]}}$");  
   
  CAtlREMatchContext<>   mc;  
   
  if(   re.Match("中文测试",&mc)   )  
  printf("OK");  
  else  
  printf("FAILED");  
   
  return   0;  
  }  
   
  我只需要验证邮件的输入等英文格式,  
  但是也要避免用书输入中时,程序崩溃。  
  如何避免呢? 问题点数:100、回复次数:8Top

1 楼opentuxedo(借哥哥的号来试试)回复于 2005-06-01 16:33:41 得分 0

可以用CAtlRECharTraitsW对付中文。  
  CAtlRegExp<CAtlRECharTraitsW>   re;  
  re.Parse(  
  (CAtlRegExp<CAtlRECharTraitsW>::RECHAR*)("^{[\\._a-zA-Z0-9]}+\\@{[a-zA-Z0-9-]+\\.}+{{[a-zA-Z][a-zA-Z]}|{[a-zA-Z][a-zA-Z][a-zA-Z]}}$"));  
   
  CAtlREMatchContext<CAtlRECharTraitsW>   mc;  
   
  if(   re.Match((CAtlRegExp<CAtlRECharTraitsW>::RECHAR*)("abcd@aa.com"),&mc)   )  
  printf("OK");  
  else  
  printf("FAILED");  
   
  Top

2 楼robinswan()回复于 2005-06-01 22:31:01 得分 0

回复人:   opentuxedo(借哥哥的号来试试)    
   
  >>>>>>>>>>>>>>>>>>>  
   
  这样的话就连正确的中文输入都匹配不到了!!!  
  不知道这位大侠,你是否遇到过这样的情况。Top

3 楼robinswan()回复于 2005-06-01 22:32:38 得分 0

对不起,是正确的英文输入,打错了。  
  比如:  
   
  guest@csdn.net  
   
  仍然是匹配不到的,指针类型转换的错误。Top

4 楼opentuxedo(借哥哥的号来试试)回复于 2005-06-02 09:12:07 得分 0

改一下正则表达式,好象在宽字节中,你的正则表达式只能匹配4个英文字符或两个中文字.没怎么用过正则表达式,你得自己查些资料.Top

5 楼keiy()回复于 2005-06-02 11:19:04 得分 100

改用boost就可以    
  regex   H1("^[\\.\\w]+\\@[a-zA-Z0-9-]+\\.+[a-zA-Z]+$");  
          char   input[]   =   "c_9c@s-dd.cc";  
      cmatch   what;  
      if(regex_match(input,what,H1))  
          MessageBox("OK");  
          else  
          MessageBox("ERROR");  
  }Top

6 楼keiy()回复于 2005-06-02 15:46:49 得分 0

我试了下了,VC的CAtlRegExp不能对中文件处理,只要是中文,就会出错  
  解决方法:  
  1.加异常处理  
      try   {  
       
  if(   re.Match("中文测试",&mc)   )  
  printf("OK");  
  else  
  printf("FAILED");  
  }  
  catch(...)  
  {  
      printf("error");  
  }  
  2.改用boost库  
  我上面的有一点小问题,这样就完全符合你的要求(CAtlRegExp的正则表达式是非标的)  
      regex   H1("^[\\.\\w]+\\@[a-zA-Z0-9-]+\\.+[a-zA-Z]{2,3}$");  
  Top

7 楼robinswan()回复于 2005-06-04 10:14:09 得分 0

keiy()   (   ):  
   
  关于中文输入是微软的那个com组件的漏洞,  
  我的微软的新闻组上得到别人的回答是这样的。  
   
  boost库是那个叫   regex++   的组件吧,  
  我下了,但是似乎头绪太多。  
  我只要简单的对话框的用户输入检验。  
   
  有没有个简单完整的例子?Top

8 楼keiy()回复于 2005-06-04 11:36:53 得分 0

1.首先,安装boost,我以前回过的  
  http://community.csdn.net/Expert/topic/3938/3938537.xml?temp=.3305933  
  2.程序头上加  
  (你可在项目中加boost的include及lib路径,或将所有boost的   include拷入vc的include\boost目录.将lib拷入vc的lib目录)  
  #include   <boost\regex.hpp>  
  using   namespace   boost;  
  3.   实现你的要求:就用以下简单的程序  
      regex   H1("^[\\.\\w]+\\@[a-zA-Z0-9-]+\\.+[a-zA-Z]{2,3}$");  
      char   input[]   =   "c_9c@s-dd.cc";  
      cmatch   what;  
      if(regex_match(input,what,H1))  
          MessageBox("OK");  
          else  
          MessageBox("ERROR");  
   
  Top

相关问题

  • 求正则表达式验证
  • 【正则表达式验证日期】
  • 验证控件的正则表达式
  • C#如何用正则表达式验证email地址?
  • 100分求一个验证EMAIL的正则表达式
  • 正则表达式:关于汉字和浮点数的验证!
  • 50分求:验证 IP地址 的 "正则表达式"!~********
  • 请问RegularExpressionValidator验证控件的正则表达式怎么写?
  • 验证Email的正则表达式,请指教!
  • 一个验证输入范围的正则表达式?

关键词

  • .net
  • 正则表达式
  • 中文
  • boost
  • vc
  • za
  • h1
  • catlregexp
  • 输入
  • elseprintf

得分解答快速导航

  • 帖主:robinswan
  • keiy

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo