1

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

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

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

4

1 回答 1

6

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

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

关于货币符号,字符类\p{Sc}覆盖了它们,C# regex 似乎支持这个类

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

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

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

^[\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}]$");

}

正则表达式替换(在此处改编;剥离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

于 2013-02-04T07:28:44.660 回答