C# 很难找到插入“的位置”;“排除”一词;在正则表达式中

C# 很难找到插入“的位置”;“排除”一词;在正则表达式中,c#,javascript,regex,C#,Javascript,Regex,我知道排除单词的正则表达式,大致上,它应该是(!?wordToIgnore | wordToIgnore2 | wordToIgnore3) 但我有一个现有的、复杂的正则表达式,我需要将其添加到中,我对如何进行这项工作感到有点困惑。我对regex还是相当陌生的,我花了很长时间制作了这个特殊的,但我不知道在哪里插入它或者如何 我的正则表达式是 (?!.*[]{2})(?!.[']{2})(?!.[-]{2})(?:[a-zA-Z0-9\:/\p{L}'-]{1,64}$)$ 这应该只允许键入者插入

我知道排除单词的正则表达式,大致上,它应该是
(!?wordToIgnore | wordToIgnore2 | wordToIgnore3)

但我有一个现有的、复杂的正则表达式,我需要将其添加到中,我对如何进行这项工作感到有点困惑。我对regex还是相当陌生的,我花了很长时间制作了这个特殊的,但我不知道在哪里插入它或者如何

我的正则表达式是

(?!.*[]{2})(?!.[']{2})(?!.[-]{2})(?:[a-zA-Z0-9\:/\p{L}'-]{1,64}$)$

这应该只允许键入者插入与该模式匹配的1到64个字母,不能以空格、引号、双引号、特殊字符、破折号、转义字符等开头,并且只允许a-z大写和小写,可以包括空格“:”、破折号和除开头以外的任何地方的引号

但是我想禁止他们使用某些单词,所以我有一个我想被禁止的单词列表,我只是不知道如何把它放在这里。。我试着把整个。。“阻塞”了,但这不起作用

?!与|和|或| a |给定|一些| |这|那么|比

以前有人遇到过这种情况吗?

请使用:

^(?!.*(the|and|or|a|given|some|that|this|then|than))(?!.*[ ]{2})(?!.*[']{2})(?!.*[-]{2})(?:[a-zA-Z0-9 \:\p{L}'-]{1,64}$)$

请参见ciel,首先,祝贺您在构建正则表达式规则方面取得了长足的进步。如果你想读一些关于各种排除的详细资料,我建议你看看

接下来,在您的特殊情况下,下面是我们如何处理您的正则表达式

  • 考虑到这一点,让我们把所有的负面环视变得更加紧凑,用一个
    (?!.*(:|-|'){2}
  • 在字符类中,
    \:
    只是转义冒号,这是不必要的,因为
    就足够了。我假设您想添加反斜杠字符,如果是这样,我们需要使用
    \\
  • \p{L}
    包括
    [a-zA-Z]
    ,因此您可以删除
    [a-zA-Z]
    。但是您确定要匹配任何脚本中的所有字母吗?(泰语等)。如果是,请记住在正则表达式字符串后设置
    u
    标志
  • 对于应用于整个字符串的“坏词排除”,请将其放置在与其他查找框相同的位置,即位于字符串的开头,但使用
    *
    ,就像在其他排除中一样:
    (?!.*(:wordToIgnore | wordToIgnore 2 | wordToIgnore 3))
    哪种前瞻先到并不重要,因为前瞻不会改变您在字符串中的位置。有关这方面的更多信息,请参阅
  • 这给了我们一个很好的正则表达式(我添加了不区分大小写的标志):

    当然,如果您不需要unicode字母,请将
    \p{L}
    替换为
    a-z


    此外,如果您想确保
    wordToIgnore
    是一个真实的单词,而不是一个嵌入的字符串(例如,您不想要
    cat
    ,但您可以使用
    catalog
    ),请为前瞻规则添加边界:
    (?!.\b(?:wordToIgnore|wordToIgnore 2 | wordToIgnore3)\b)

    它必须是正则表达式吗?它必须与jQuery验证和ASP.NET MVC服务器端验证一起使用,因此正则表达式更可取。如果我不能使它与正则表达式一起工作,我将使用更为暴力的方法来实际操作/解析字符串,但如果可以避免的话,我宁愿不走这条路。当问正则表达式问题时,请确保添加语言标记(正则表达式的行为在很大程度上取决于所使用的正则表达式引擎)例如,上面的正则表达式:有一个字符类,其中包括:
    \p{L}
    UNICODE字母,但JavaScript无法识别这种语法-它的正则表达式引擎将其视为:\,
    p
    {/code>,
    L
    。嘿,谢谢!我不知道它在不同的语言中是不同的。。这似乎不太管用。用两个词输入一个普通的名字是不能通过测试的。下面是一个例子,在我添加单词exclusions之前,它是如何工作的。。。我基本上希望最后两行是无效输入。这仍然无法实现——行应该失败,因为它们包含黑名单上的单词,而不是因为它们有3个单词。用这种方法,他们只会失败,因为他们只有3个单词而不是2个。嘿,这是一篇非常有用的帖子,非常感谢。我花了很长时间在我现在拥有的正则表达式上,这并不容易——它是一门非常大的“语言”,需要学习!你的样品完全正确,这绝对是我想要做的。我一走近电脑,就会更详细地看它。@Ciel很高兴看到你友好而积极的反馈,很高兴它能起作用。:)在我看来,对于一个刚开始使用regex的人来说,你做得非常好,你构建的表达式有正确的想法。再有几件物品点击一下,你马上就能赶上进度了。:)如果你找到时间,你可能会发现答案中提到的问题很有用。如果出现一些问题,请随时重新访问。
    ^(?i)(?!.*(?:wordToIgnore|wordToIgnore2|wordToIgnore3))(?!.*(?: |-|'){2})(?:[\\0-9 :/\p{L}'-]{1,64}$)$