需要RegEx来过滤除键盘字符之外的任何内容
本文关键字:任何内 字符 键盘 RegEx 过滤 需要 | 更新日期: 2023-09-27 17:57:43
在我的应用程序中,客户端正在将数据从MS word上传到Textarea。我的RegEx技能不太好:)
我需要一个RegEx来过滤字符串中的所有垃圾字符,唯一可以接受的输入是键盘上的字符。即A-Z、A-Z、0-9和键盘上的所有特殊字符+所有货币符号。
编辑:我想只允许ascii代码包括扩展。http://www.asciitable.com/
我已经检查了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