【问题标题】:Disallow specific special characters in regex禁止正则表达式中的特定特殊字符
【发布时间】:2015-07-01 08:50:47
【问题描述】:

我有以下正则表达式:

[\u00BF-\u1FFF\u2C00-\uD7FF\w \&quot;"",.()/-<br\s/?>]+$

它允许除#,* 等特殊字符之外的任何语言的字符。(尽管您可以在上面的正则表达式中看到一些特殊字符)。

但是,我的正则表达式也允许不需要的特殊字符,例如 &lt;,&gt;,&amp;

我应该如何修改这个正则表达式来禁止输入字符串中的这些字符?

【问题讨论】:

  • 您的接受字符列表中有这些字符。不让他们进去怎么样?看起来您可能误解了您的正则表达式实际上是什么意思来判断“”在那里,看起来也像一个 br 标签。
  • @Chris..yes...字符在我在正则表达式中指定的范围内,但这就是我应该如何修改正则表达式以排除这些字符的问题?
  • 查看msdn.microsoft.com/en-us/library/… 以获取有关您使用的字符类构造如何工作的信息。它匹配其中的任何字符,因此更好的是[\u00BF-\u1FFF\u2C00-\uD7FF\w \quot;"",.()/-br\s/?]+$,它与您的相同,但删除了&lt;&gt;&amp;。我没有进一步研究为什么它可能不起作用,所以我不保证这会解决你的问题。

标签: c# asp.net regex asp.net-mvc


【解决方案1】:

您需要对某些正则表达式部分使用交替(&lt;br\s/?&gt; 被视为单独的字符 &lt;b 等),并且/-&lt; 正在创建一个范围,接受比您想象的更多的字符:

因此,我建议使用

^(?:[\u00BF-\u1FFF\u2C00-\uD7FF\w ",.()/:;-]|&quot;|<br\s?/?>)+$

在 C# 中,使用逐字字符串文字:

@"^(?:[\u00BF-\u1FFF\u2C00-\uD7FF\w "",.()/:;-]|&quot;|<br\s?/?>)+$"

demo on regexstorm

我假设您需要匹配 3 个“实体”或它们的组合:

  • [\u00BF-\u1FFF\u2C00-\uD7FF\w ",.()/-] - 字符范围\u00BF-\u1FFF\u2C00-\uD7FF\w、空格、双引号、,.()/ 和文字连字符
  • &amp;quot; - 文字 &amp;quot;
  • &lt;br\s?/?&gt; - &lt;br&gt; 标签(可以匹配 &lt;br&gt;&lt;br/&gt;&lt;br /&gt;)。

^$ 将在开头和结尾强制匹配。

【讨论】:

  • 我认为您也可以在&amp;quot; 中删除&amp; 的转义,&amp; 不是正则表达式特殊字符。
  • 是的..它工作但正则表达式中间的" 正在破坏正则表达式我应该如何解决这个问题,我也想允许:; ???
  • 将字符添加到连字符之前的字符类中(见注释末尾)。您是否将其声明为逐字字符串文字?如果是,则加倍:@"^(?:[\u00BF-\u1FFF\u2C00-\uD7FF\w "",.()/:;-]|&amp;quot;|&lt;br\s?/?&gt;)+$".
  • 是的...在正则表达式中添加\n作为输入键...它现在正在工作..非常感谢..我这边也有一个支持...:)...
  • 关于换行的注意事项:您可能还想添加\r 以支持任何类型的换行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 2023-03-31
相关资源
最近更新 更多