我们需要限制字符串中的有效/允许字符。我们得到的规则如下:
- 空格替换为下划线
- 长度限制为 256(编译器限制)
- 必须在 ASCII 码 32(空格)和 126(~)之间,并且...
- 它不能包含以下任何内容:
- : (冒号)
- ; (分号)
- ,(逗号)
- '(单引号)
- "(双引号)
- \t(制表符)
- \n (换行)
- \r (回车)
- \\(反斜杠)
任何不符合上述规则的内容都应替换为下划线。(我们可以简单地在最后修剪长度规则,除非 RegEx 中也有一些东西可以解决这个问题。)
现在我知道如何通过创建一个这样的类来说明允许的字符,比如字母数字字符......
[a-zA-Z0-9]
...然后在像这样的 Replace 调用中使用它的倒数(注意前导克拉)...
var cleanedString = RegEx.Replace(sourceString, "[^a-zA-Z0-9]", replacementString);
...但是我如何处理范围(“必须在 ' ' 和 '~' 之间”条件)以及特别排除的字符?您是否将其作为这样的“或”操作?
var cleanedString = RegEx.Replace(sourceString, @"[^ -~]|[;:,'""\t\n\r\\]", replacementString);
注意:这就是你在''(空格)和'~'之间开始一个范围的方式吗?不知道我是否必须以某种方式明确地逃离空间。
更一般地说,就像问题的标题所问的那样,说规则是它必须高于 32,但没有上限。你怎么能指定这样一个开放的范围?