需要正则表达式来过滤除键盘字符以外的任何内容

Noo*_*per 1 c# regex

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

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

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

Joh*_*rak 5

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

很难说是什么定义了“键盘上存在的特殊字符”,但我假设您的意思是可打印的非字母数字字符。虽然所有 unicode 空白字符(非制动空格、零宽度字非连接符...)确实是“特殊的”,但大多数键盘都没有它们。退格字符虽然出现在大多数键盘上,但通常由操作系统解释,所以我假设您不想要那样。类似的论点适用于 tab 键:虽然 tab 字符比换行符更容易获得,但它通常不能输入到表单输入中。

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

非美式键盘包含更多字符(带变音符号的符号、西里尔字母、中文/日文/韩文字符),但它们与您对“AZ、az、0-9 和键盘上出现的所有特殊字符 + 全部”的描述不符货币符号”。特别有趣的是日语的句尾标点符号,它是一个空心圆圈,而不仅仅是一个点。但是,虽然它符合您的描述,但我相信您也不希望那样。

C# 也支持\p{isBasicLatin},但这包括 ASCII 控制字符,我假设您不想要。

总结一下:您的描述与整个可打印的 ASCII 范围和换行符匹配\n。要检查字符串是否由这些组成,请使用以下正则表达式:

^[\x20-\x7E\n\p{Sc}]$
Run Code Online (Sandbox Code Playgroud)

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

^[\x20-\x7E\n]$
Run Code Online (Sandbox Code Playgroud)

或整个 ASCII 范围,包括控制字符和所有 ASCII 空格:

^[\x00-\x7F]$
^[\p{isBasicLatin}]$
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

正则表达式替换(在此处改编;去掉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`!@#$%^&*()_+|\-=\\{}\[\]:"";'<>?,./]", ""); 
}
Run Code Online (Sandbox Code Playgroud)

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