【问题标题】:Regex to detect any of the following characters: ! @ # $ % ^ & * ( ) < > ‘ ’+ [ ] ? { } | , ; : . “ ~ ` [duplicate]正则表达式检测以下任何字符:! @#$​​%^&*()<>‘’+[]? { } | , ; : . “~`[重复]
【发布时间】:2017-02-27 06:36:43
【问题描述】:

您好,我正在尝试确保文本框不包含以下任何字符:

! @ # $ % ^ & * ( ) < > ‘ ’+ [ ] ? { } | , ; : . “ ~ `

我正在尝试将正则表达式与 C# 服务器端代码一起使用: 类似于下面的内容(但我认为我的正则表达式是错误的):

Regex reg = new Regex(@"^[^\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~]+$");//! @ # $ % ^ & * ( ) < > ‘ ’+ [ ] ? { } | , ; : . “ ~ `
if(!Regex.IsMatch(Textbox_Timetable.Text.Trim(), @"^[^\%\/\\\&\?\,\'\;\:\!\-]+$"))                     
    AddError("Timetable Name must not contain following characters: " + @"\%\/\\\&\?`\,\'\;\:\!\-");

【问题讨论】:

  • 现在第一个问题是......那些 ALL 是你不想要的字符还是只是你键盘上的字符还是你只希望 AZ, 0-9 ?

标签: c# regex


【解决方案1】:

如果您想要可读代码,请使用Regex.Escape(...) 方法:

var escaped = Regex.Escape("!@#$%^&*()<>‘’+[]?{}|,;:.“~`");
var regex = new Regex($"[{escaped}]");

这比手动转义每个字符要容易得多!

您应该从您的正则表达式中删除^$。您想检测这些字符中的 any 是否在目标字符串中,但在您的正则表达式中使用这些字符意味着它仅在 every 字符来自该列表时才匹配。

(此代码未经测试,因为我没有可用的编译器)

【讨论】:

  • 如果您将它们放在字符类中,则无需转义这些字符:[][!@#$%^&amp;*()&lt;&gt;‘’+?{}|,;:.“~`]
  • 感谢您的回复。方括号需要用反斜杠括起来。
【解决方案2】:
[^\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~]+

^如果在方括号中作为第一个字符出现,则表示匹配除后面的任何字符

\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~]

使用这个

^[\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~^@]+` or `^[\^\%\/\\\&\?\,\'\;\:\!\+\$#\^\*\(\)\|~@]+

解决。

【讨论】:

    【解决方案3】:

    只需获取您想要的任何字符[!@#$%^&amp;*()&lt;&gt;‘’+[]?{}|,;:.“~`],这就是您的正则表达式。然后使用 !` 进行简单的反转就可以检查输入是否有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多