需要RegEx来过滤除键盘字符之外的任何内容

本文关键字:任何内 字符 键盘 RegEx 过滤 需要 | 更新日期: 2023-09-27 17:57:43

在我的应用程序中,客户端正在将数据从MS word上传到Textarea。我的RegEx技能不太好:)

我需要一个RegEx来过滤字符串中的所有垃圾字符,唯一可以接受的输入是键盘上的字符。即A-Z、A-Z、0-9和键盘上的所有特殊字符+所有货币符号。

编辑:我想只允许ascii代码包括扩展。http://www.asciitable.com/

需要RegEx来过滤除键盘字符之外的任何内容

我已经检查了ASCII表,它包含的所有可打印符号都存在于任何标准键盘上。

很难说"键盘上的特殊字符"是什么定义的,但我想你指的是可打印的非字母数字字符。虽然所有unicode空白字符(非制动空格、零宽度单词非joiner…)确实是"特殊的",但它们在大多数键盘上都不存在。退格字符虽然出现在大多数键盘上,但通常由操作系统来解释,所以我想你不希望这样。一个类似的参数适用于tab键:虽然tab字符比换行符更容易获得,但它通常不能键入到表单输入中。

关于货币符号,字符类'p{Sc}涵盖了它们,C#正则表达式似乎支持这个类

非美国键盘包含更多的字符(带有变音符号、西里尔字母、中文/日语/韩语字符的符号),但它们与您对"A-Z、A-Z、0-9和键盘上的所有特殊字符+所有货币符号"的描述不匹配。特别有趣的是日语的句末标点符号,它是一个空心的圆圈,而不仅仅是一个点。然而,虽然它符合你的描述,但我相信你也不想要。

C#也支持'p{isBasicLatin},但其中包括ASCII控制字符,我认为您不需要这些字符。

总之:您的描述与整个可打印ASCII范围和换行符'n相匹配。要检查字符串是由这些组成的,请使用以下regex:

^['x20-'x7E'n'p{Sc}]$

反映您的编辑,还要考虑所有可打印的ASCII字符(大多数货币符号不存在,$不存在)+换行

^['x20-'x7E'n]$

或者包括控制字符和所有ASCII空白的整个ASCII范围:

^['x00-'x7F]$
^['p{isBasicLatin}]$

参考:
MSDN字符类
MSDN字符转义
MSDN代码示例(此处改编):

bool IsValid(string strIn)
{
    // Return true if strIn is in valid format.
    return Regex.IsMatch(strIn, @"^['x20-'x7E'n'p{Sc}]$");
}

regex-replace(此处适用;去掉everything except A-Z, a-z , 0-9 and following characters. ~ ` ! @ # $ % ^ & * ( ) _ + | - = ' { } [ ] : " ; ' < > ? , . /

String CleanInput(string strIn)
{
    // Replace invalid characters with empty strings.
    return Regex.Replace(strIn,
          @"[^a-zA-Z0-9`!@#$%^&*()_+|'-=''{}'[']:"";'<>?,./]", ""); 
}

关于逐字字符串文字中的双引号:http://blogs.msdn.com/b/gusperez/archive/2005/08/10/450257.aspx