在我的应用程序客户端中,将数据从 MS word 上传到 Textarea。我的 RegEx 技能不太好:)
我需要一个正则表达式来过滤字符串中的所有垃圾字符,唯一可接受的输入是来自键盘的字符。即 AZ、az、0-9 以及键盘上出现的所有特殊字符 + 所有货币符号。
编辑:我只想允许包括扩展的 ascii 代码。http://www.asciitable.com/
在我的应用程序客户端中,将数据从 MS word 上传到 Textarea。我的 RegEx 技能不太好:)
我需要一个正则表达式来过滤字符串中的所有垃圾字符,唯一可接受的输入是来自键盘的字符。即 AZ、az、0-9 以及键盘上出现的所有特殊字符 + 所有货币符号。
编辑:我只想允许包括扩展的 ascii 代码。http://www.asciitable.com/
我检查了 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