如何用正则表达式判断输入的是中文(包括标点符号)

新知识创未来 2010-09-07 11:16:48
我试过了汉字可以使用\u4E00-\u9FA5\uF900-\uFA2D来表示,但是标点符号是个问题,毕竟中文中的特殊字符多。如果我向下面这样罗列估计会很长,效率可能也不高,请问有什么好办法可以同时判断输入的是中文和中文标点的组合吗?

这样"^[\u4E00-\u9FA5\uF900-\uFA2D\x20,。?…]+$"好像太长而且罗列不全,请高手指点迷津。
...全文
1751 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2010-09-07
  • 打赏
  • 举报
回复
字符都是数字

字符到数字的映射称为编码

给定一个数字, 知道编码, 才能知道是哪个字符,

不过多种常见编码有重叠.

兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
你可以创建一个测试项目。用一个大循环。遍历0~0xffff之间的字符,调用char.IsPunctuation(c)方法获得是否是符号,吧符号的编码记下来,创建一个大的正则表达式范围集合,或是直接用字符串匹配来查找。
新知识创未来 2010-09-07
  • 打赏
  • 举报
回复
我现想做百虎谷搜索 ,希望建立一个相对完善的正则验证库,如果能够简洁的实现判断,我想是最好的。如果不行就在构造正则前建立几个方法……您还有什么高见吗?
兔子-顾问 2010-09-07
  • 打赏
  • 举报
回复
static void Main(string[] args)
{
string s = "测试半角,!全角。!";
foreach (char c in s)
{
Console.WriteLine(c.ToString() + " " + (char.IsPunctuation(c) ? "符号" : "非符号"));
}
Console.ReadKey();
}


测 非符号
试 非符号
半 非符号
角 非符号
, 符号
! 符号
全 非符号
角 非符号
。 符号
! 符号


如果是正则,就只能自己枚举出可能的符号了
[?,.;'\[\]{}~!@#$%^&*()_+|\-\\~!@#¥%……&*()——+|、]

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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