求教:只能输入汉字的正则表达式

zzsse 2010-11-25 06:45:02
rt

我用的是[\u4e00-\u9fa5],但是中文输入法下的"、"和"……"仍然能通过,很困惑
...全文
2079 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbzhang800 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zzsse 的回复:]
我主要就是这个目的,用的就是这几行代码,8楼说的可以解决,用QString::fromUtf8()转一下str就可以了
[/Quote]

看你这样描述,我猜你的编码问题现在仍是一知半解:
http://hi.baidu.com/cyclone/blog/item/9d7293130e5a498d6538dbf1.html
zzsse 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dbzhang800 的回复:]

引用 6 楼 zzsse 的回复:

这个不能通过才对啊 现在结果是通过了, 我的要求是只能输入汉字、数字、字母和下划线

是啊,我说的测试正常就是你现在描述的这个啊,不能通过。没发现你说的程序的结果。

另外,你不能把你测试的真实代码贴出来么?一个完整的测试这个问题的程序最多也就10来行代码。你贴出或许看出来到底是什么问题。你一开始就把问题限定死了,对你解决问题可能起反作用
[/Quote]
我主要就是这个目的,用的就是这几行代码,8楼说的可以解决,用QString::fromUtf8()转一下str就可以了
zzsse 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 darkdong 的回复:]

1.我是看QRegExp文档说匹配unicode是用\x,不过实际我试了试\u貌似也可以
2.我这里看到你发的帖子是bool match = rx.exactMatch();这里确实没有str参数
3.我试了你的正则表达式是正确的,基本上能达到你要的效果
4.我猜你没弄对的原因大概是因为你直接使用了QString str = "……、";硬编码
这个跟你当前文件的编码方式有关,比如你的源……
[/Quote]
恩,正如你所说,正则表达式没问题,那个str用QString::fromUtf8(),就可以了...
zhaoli_1956 2010-11-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zzsse 的回复:]

引用 5 楼 darkdong 的回复:

qt中正则表达式匹配unicode的写法为\xhhhh而不是\uhhhh
另外反斜杠要double
另外你那个exactMatch参数就没写str
另外用了exactMatch就不必用^$包住
另外还是我上面说的顿号、根本就不在汉字的编码范围内
另外汉字的编码范围不只是4e00-9fa5

我要的效果是只能输入汉字、字母、数字和下划线……
[/Quote]

linux下转义字符\要double,看具体是在哪个平台下
zzsse 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 darkdong 的回复:]

qt中正则表达式匹配unicode的写法为\xhhhh而不是\uhhhh
另外反斜杠要double
另外你那个exactMatch参数就没写str
另外用了exactMatch就不必用^$包住
另外还是我上面说的顿号、根本就不在汉字的编码范围内
另外汉字的编码范围不只是4e00-9fa5
[/Quote]
我要的效果是只能输入汉字、字母、数字和下划线
1.我试过了,用\xhhhh达不到我要的效果,用\uhhhh除了我说的……和、之类的特殊符号之外 能达到我要的效果。
2.\u就是转义字符,不用加double反斜杠吧。
3.exactMatch参数里我写了str.
4.这里加不加^$效果差不多。
5.顿号不在汉字编码范围内,但这里却能通过,所以我很困惑啊
6.我也不清楚汉字的编码范围,这是我在网上找的,具体的范围请仁兄赐教
zzsse 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dbzhang800 的回复:]

引用 3 楼 zzsse 的回复:

QString str = "……、";
QRegExp rx("^[\u4e00-\u9fa5\\w]+$");
bool match = rx.exactMatch(str);
if(match)
printf("match...\n");
else
printf("not match...");

测试正常,没看到你描述的结果
[/Quote]

这个不能通过才对啊 现在结果是通过了, 我的要求是只能输入汉字、数字、字母和下划线
  • 打赏
  • 举报
回复
路过,学习了。。。
dbzhang800 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zzsse 的回复:]

这个不能通过才对啊 现在结果是通过了, 我的要求是只能输入汉字、数字、字母和下划线
[/Quote]
是啊,我说的测试正常就是你现在描述的这个啊,不能通过。没发现你说的程序的结果。

另外,你不能把你测试的真实代码贴出来么?一个完整的测试这个问题的程序最多也就10来行代码。你贴出或许看出来到底是什么问题。你一开始就把问题限定死了,对你解决问题可能起反作用
巴依老爷 2010-11-27
  • 打赏
  • 举报
回复
1.我是看QRegExp文档说匹配unicode是用\x,不过实际我试了试\u貌似也可以
2.我这里看到你发的帖子是bool match = rx.exactMatch();这里确实没有str参数
3.我试了你的正则表达式是正确的,基本上能达到你要的效果
4.我猜你没弄对的原因大概是因为你直接使用了QString str = "……、";硬编码
这个跟你当前文件的编码方式有关,比如你的源文件是UTF-8编码的,那么你应该这样:
QString str = QString::fromUtf8("……、");测试的时候你可以用一个QLineEdit作为输入,
这样从里面拿出来的内容保证是一个合法的QString
5.最常用的汉字编码都在U+4e00-U+9FFF,还有一些补充兼容块,如果不需要那么精确的话可以忽略
巴依老爷 2010-11-26
  • 打赏
  • 举报
回复
qt中正则表达式匹配unicode的写法为\xhhhh而不是\uhhhh
另外反斜杠要double
另外你那个exactMatch参数就没写str
另外用了exactMatch就不必用^$包住
另外还是我上面说的顿号、根本就不在汉字的编码范围内
另外汉字的编码范围不只是4e00-9fa5
dbzhang800 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zzsse 的回复:]

QString str = "……、";
QRegExp rx("^[\u4e00-\u9fa5\\w]+$");
bool match = rx.exactMatch(str);
if(match)
printf("match...\n");
else
printf("not match...");
[/Quote]
测试正常,没看到你描述的结果
zzsse 2010-11-26
  • 打赏
  • 举报
回复
QString str = "……、";
QRegExp rx("^[\u4e00-\u9fa5\\w]+$");
bool match = rx.exactMatch();
if(match)
printf("match...\n");
else
printf("not match...");
巴依老爷 2010-11-25
  • 打赏
  • 举报
回复
标点符号本来就不在那个范围里
dbzhang800 2010-11-25
  • 打赏
  • 举报
回复
贴你的测试用代码

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧