在我的应用程序中,客户端正在将数据从 MS word 上传到 Textarea。我的 RegEx 技能不太好:)
我需要一个 RegEx 来过滤字符串中的所有垃圾字符,唯一可接受的输入是来自键盘的字符。即,AZ、az、0-9 和键盘上出现的所有特殊字符+所有货币符号。
编辑:我只想允许包含扩展的 ascii 代码。http://www.asciitable.com/
我检查了 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 代码示例(在此处改编):
Run Code Online (Sandbox Code Playgroud)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. ~ ` ! @ # $ % ^ & * ( ) _ + | - = \ { } [ ] : " ; ' < > ? , . /)
Run Code Online (Sandbox Code Playgroud)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
| 归档时间: |
|
| 查看次数: |
8186 次 |
| 最近记录: |