您好,我试图确保文本框中不包含以下任何字符:
! @ # $ % ^ & * ( ) < > ‘ ’+ [ ] ? { } | , ; : . “ ~ `
我试图在C#服务器端代码中使用正则表达式: 类似下面的东西(但我认为我的正则表达式是错误的):
Regex reg = new Regex(@"^[^\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~]+$");//! @ # $ % ^ & * ( ) < > ‘ ’+ [ ] ? { } | , ; : . “ ~ `
if(!Regex.IsMatch(Textbox_Timetable.Text.Trim(), @"^[^\%\/\\\&\?\,\'\;\:\!\-]+$"))
AddError("Timetable Name must not contain following characters: " + @"\%\/\\\&\?`\,\'\;\:\!\-");
答案 0 :(得分:1)
如果您想要可读代码,请使用Regex.Escape(...)
方法:
var escaped = Regex.Escape("!@#$%^&*()<>‘’+[]?{}|,;:.“~`");
var regex = new Regex($"[{escaped}]");
这比手动转义每个角色要容易得多!
您应该从正则表达式中删除^
和$
。您想要检测这些字符中是否存在任何,但是在正则表达式中使用这些字符意味着它只会匹配每个字符来自该列表。< / p>
(此代码尚未经过测试,因为我没有可用的编译器)
答案 1 :(得分:0)
[^\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~]+
^
如果作为方括号中的第一个字符出现,那么它表示匹配除了
\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~]
使用此
^[\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~^@]+` or `^[\^\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~@]+
解决。
答案 2 :(得分:0)
只需抓住您想要的任何字符[!@#$%^&*()<>‘’+[]?{}|,;:.“~`]
,这就是您的正则表达式。然后使用!`进行简单的反演即可检查输入是否为vald。