匹配包含任何非ASCII字符的字符串的 .Net正则表达式

5

寻找一些黑魔法,可以匹配任何带有“奇怪”字符的字符串。标准ASCII字符是可以的,其他字符则不可以。

这是为了清理各种网络表单。


1
真的吗?U+0001起始标题或U+0007响铃可以,但普通英语不行吗?你确定要匹配ASCII吗? - Jon Hanna
加油,为什么你要讨厌\a呢?它很棒。但是,说真的,我上次检查时发现它们中没有一个像镜像字符或其他一些字符那样干扰页面渲染。 - John Shedletsky
1
é 也不会影响页面。如果问题是与页面呈现有关,则可以使用 \p{C}new Regex(@"\p{C}").Replace(suspect, string.Empty) 将清除 ASCII 和非 ASCII 控件和格式化程序,同时不会损坏正常文本,这比更为天真(或者你认为是幼稚)的方法更好。特别是如果您在任何地方都有人名、地名或地点出现(正确的名称是英语中非 ASCII 字母经常出现的地方,也是用户特别生气的地方,如果您搞砸了它们)。 - Jon Hanna
ï是ASCII,你知道的;-) - John Shedletsky
我刚刚遇到了这个问题,对于一些框架(如ASP.NET MVC),答案并不是一个简单的排除正则表达式。请参考此处以了解更多信息:http://nimblegecko.com/how-to-validate-a-textfield-for-only-printable-characters-in-aspnet-mvc/。 - Art
2个回答

7

这可以获取ASCII范围之外的任何内容

[^\x00-\x7F]

仍然存在一些“奇怪”的字符,如x00(NULL),但它们是有效的ASCII。
有关参考,请参见ASCII表


1
那个“ASCII表”页面太烂了(请原谅我的用词)。它将第二张图表呈现为“最流行”的“扩展ASCII集” - 再来一遍?这是Cp850!没有人会有意使用它;它只是Windows命令行的默认编码。此外,这些表格是图片,在LCD显示器上看起来很糟糕(请原谅我的用词)。将它们发送到维基百科:http://en.wikipedia.org/wiki/ASCII - Alan Moore
对于“可打印ASCII”(我认为几乎每个搜索此内容的人都想要这个),我会使用[^\x20-\x7E]。这将剔除控制字符0x0到0x31和0x7F控制字符。或者,[^\x20-\x7E\r\n\t],它添加了常见的行结束字符和制表符,这可能是需要的,也可能不需要。 - Bacon Bits

2

[^\p{IsBasicLatin}]是所要求的,[^\x00-\x7F]则是在简洁性和自我文档化之间取得平衡,或者使用\p{C}清除格式化程序和控件而不会损害其他非ASCII字符(并且更加简洁)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接