诡异的正则

别样苍茫 2010-11-17 09:13:44
Regex reg = new Regex(@"^\w+$");
//Match mat = reg.Match(str);
return reg.IsMatch(str);

原本想匹配 a-zA-Z0-9 _

小弟不才,输入中文和英文居然都能验证通过,各位牛人能否帮忙检查下。。。


如果直接写 Regex reg = new Regex(@"^[A-Za-z0-9_\.\-\s]+$");
可以区分是否含有特殊字符和中文
...全文
193 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
syb1045 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 yypf2540017 的回复:]
很强大 学习
[/Quote]
+1
int64 2010-11-17
  • 打赏
  • 举报
回复
明白了,呵呵
li309000011 2010-11-17
  • 打赏
  • 举报
回复
学习。。。。
Mr-Jee 2010-11-17
  • 打赏
  • 举报
回复
javascript不支持的有 逆序环视、命名捕获、固化分组
别样苍茫 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jshi123 的回复:]
指定ECMAScript选项:
Regex reg = new Regex(@"^\w+$", RegexOptions.ECMAScript);
http://msdn.microsoft.com/zh-cn/library/20bw873z%28v=VS.90%29.aspx
[/Quote]

jshi123的方法非常强大,.net里面确实匹配的范围太大了,但是微软也帮我们做了分类,根据自己的需求,选择对应的枚举值就可以了。

感谢各位的帮忙
别样苍茫 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wuyazhe 的回复:]
引用 16 楼 luqc1985 的回复:
思路还是太狭窄了,还需要要多了解各语言的区别。。。


如果这样,我更倾向于用某种通用写法就不用小心翼翼了。
[/Quote]

呵呵 js和 .net 验证都是必须的,前端验证可以给客户更好的体验,后台验证可以使我们的程序更安全
yypf2540017 2010-11-17
  • 打赏
  • 举报
回复
很强大 学习
wackyboy 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wuyazhe 的回复:]
引用 16 楼 luqc1985 的回复:
思路还是太狭窄了,还需要要多了解各语言的区别。。。


如果这样,我更倾向于用某种通用写法就不用小心翼翼了。
[/Quote]


我一般表示数字就用[0-9] 比如文本框输入电话号码 全角的电话号码在自动拨号的时候就会出错 所以不能用\d
单词字符也一样 JS中可以用\w 而C#中就不行了 范围太大了
兔子-顾问 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 luqc1985 的回复:]
思路还是太狭窄了,还需要要多了解各语言的区别。。。
[/Quote]

如果这样,我更倾向于用某种通用写法就不用小心翼翼了。
kkbac 2010-11-17
  • 打赏
  • 举报
回复
hch126163 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jshi123 的回复:]

指定ECMAScript选项:
Regex reg = new Regex(@"^\w+$", RegexOptions.ECMAScript);
http://msdn.microsoft.com/zh-cn/library/20bw873z%28v=VS.90%29.aspx
[/Quote]

+1
别样苍茫 2010-11-17
  • 打赏
  • 举报
回复
思路还是太狭窄了,还需要要多了解各语言的区别。。。
别样苍茫 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wuyazhe 的回复:]
引用 12 楼 luqc1985 的回复:
但是
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

邮件的正则 为啥输入中文不能通过验证呢?

真的是因为.NET中\w包含中文一说吗?


中文可以通过。

中文@测试.com
[/Quote]

恩,通过验证了,刚才@前面多了个.
wackyboy 2010-11-17
  • 打赏
  • 举报
回复
C#引擎中 \w不但包括中文 连日文 朝鲜文 俄文等都包括
就像\d 也包含全角数字一样
如果有特定字符区分 还是要区别对待
兔子-顾问 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 luqc1985 的回复:]
但是
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

邮件的正则 为啥输入中文不能通过验证呢?

真的是因为.NET中\w包含中文一说吗?
[/Quote]

中文可以通过。

中文@测试.com
别样苍茫 2010-11-17
  • 打赏
  • 举报
回复
但是
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

邮件的正则 为啥输入中文不能通过验证呢?

真的是因为.NET中\w包含中文一说吗?
Mr-Jee 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zsc970 的回复:]

顶,3楼
[/Quote]有些东西不能乱顶的~
Mr-Jee 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jshi123 的回复:]

指定ECMAScript选项:
Regex reg = new Regex(@"^\w+$", RegexOptions.ECMAScript);
http://msdn.microsoft.com/zh-cn/library/20bw873z%28v=VS.90%29.aspx
[/Quote]
good practice
q107770540 2010-11-17
  • 打赏
  • 举报
回复
\w在C#中是匹配中文的
Mr-Jee 2010-11-17
  • 打赏
  • 举报
回复
所以在.net中\w不能等价于[a-zA-Z0-9\-]
加载更多回复(3)

62,074

社区成员

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

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

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

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