【问题标题】:ignore words and remove case sensitive and space to match忽略单词并删除区分大小写和空格以匹配
【发布时间】:2019-09-04 19:26:50
【问题描述】:

我想忽略“正则表达式”,但也忽略空格和大写,所以如果有人输入“正则表达式”或“正则表达式”,它仍然会匹配并忽略。你能帮忙吗?

^(?!(regularexpression)$)[a-zA-Z](?:[ ()'.\-a-zA-Z]*[a-zA-Z()])

我在 parsley.js 中使用这段代码:

data-parsley-pattern="^(?!(regularexpression)$)[a-zA-Z](?:[ ()'.\-a-zA-Z]*[a-zA-Z()])"

我想忽略一组单词,但它们没有空格或小写字母。因此,我需要涵盖上面示例中的变化。

【问题讨论】:

  • 你能提供一个你正在匹配的数据样本吗?
  • 我将此代码与 parsley.js 一起使用 data-parsley-pattern="^(?!(regularexpression)$)[a-zA-Z](?:[ ()'.\-a -zA-Z]*[a-zA-Z()])" 并且我有一组我想忽略的单词,但它们没有空格或小写字母。所以我需要涵盖上面示例中的变化。
  • @Alinacdn 那么,您想使用一个匹配字符串的模式,该字符串不包含某些短语(有或没有空格)?你能解释一下吗?
  • 或者你的意思是除了否定之外,整个字符串应该只包含字母、空格、()'.- 并且应该以一个字母并以字母或括号结尾?
  • 好的,所以这是一种形式,人们被限制使用列表中的单词或 2 个单词,但他们可以提交除忽略中的单词之外的任何其他单词。问题是里面的那些忽略了 2 个字被写成 1 个字。就像在我的例子中一样:忽略单词:正则表达式。但是人们会提交带有空格或大写字母等的正则表达式。我想匹配忽略。除了忽略列表之外,他们可以使用任何其他单词/单词,这就是为什么我有其余的语法来允许忽略列表之外的其余单词。

标签: javascript regex validation parsley.js


【解决方案1】:

根据您的模式判断,您希望整个字符串仅包含字母、空格、()'.-,并且应该以字母开头并以字母结尾或括号。除此之外,如果字符串包含regular expressionregularexpressionRegULar ExpressioN 等,您将尝试否定匹配。

parsley.js 中,您可以同时使用 stringregex literal 模式,即 data-parsley-pattern="\d+" = data-parsley-pattern="/^\d+$/"。请注意,字符串模式由框架自动锚定,而使用正则表达式文字符号时,您需要添加锚点以确保整个字符串与正则表达式匹配。

由于 JavaScript 正则表达式不支持内联修饰符,您需要使用 *regex 文字符号和 / 作为分隔符

data-parsley-pattern 看起来像

data-parsley-pattern="/^(?!.*regular\s*expression)[a-zA-Z](?:[ ()'.a-zA-Z-]*[a-zA-Z()])?$/i"

请参阅regex demo注意/.../ii 在这里是不区分大小写的标志

要添加更多例外,请继续添加 (?!.*my\s*new\s*phrase),或在单个前瞻中使用替代,(?!.*(?:regular\s*expression|my\s*new\s*phrase))。此外,如果您需要将这些短语作为整个单词进行匹配,请使用单词边界,例如(?!.*\b(?:regular\s*expression|my\s*new\s*phrase)\b).

模式详情

  • ^ - 字符串开头
  • (?!.*regular\s*expression) - 如果有 regular + 0 个或更多空格,然后 expression 在除换行符之外的任何 0+ 个字符之后,则不匹配
  • [a-zA-Z] - 一个 ASCII 字母
  • (?:[ ()'.a-zA-Z-]*[a-zA-Z()])? - 可选序列
    • [ ()'.a-zA-Z-]* - 0+ ASCII 字母、空格、()'.-
    • [a-zA-Z()] - ASCII 字母或 ()
  • $ - 字符串结束。

JS 演示:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="http://cdn.jsdelivr.net/parsleyjs/2.0.0-rc5/parsley.js"></script>

<form id="parsley" data-parsley-validate>
  <input type="text" name="the_name" id="the_id" data-parsley-pattern="/^(?!.*regular\s*expression)[a-zA-Z](?:[ ()'.a-zA-Z-]*[a-zA-Z()])?$/i" required>
  <input type="submit" />
</form>

【讨论】:

    【解决方案2】:

    不幸的是,我不知道如何将这些组合在一起,但有人会知道,但这里是我将使用的正则表达式模式。

    1. 空格和字符大小写
    2. 对于单词正则表达式。

      ^[A-Za-z.\s_-]+$

      (?:regularexpression|regular expression)

    【讨论】:

      【解决方案3】:

      这有点难猜,也许这个表达可能更接近你的想法:

      (?i)^(?!(regular\s*expression)$)[a-z](?:[ ()'.a-z-]*[a-z()])$
      

      如果您想探索/简化/修改表达式,它已经 在右上角的面板上进行了解释 regex101.com。如果你愿意,你 也可以在this link看,怎么搭配 针对一些样本输入。


      【讨论】:

      • JavaScript 正则表达式不允许使用内联修饰符。
      • @Alinacdn 您从这个答案中得到了什么帮助?该解决方案不起作用,也没有帮助,它只是在 JS 中不起作用。
      • 你的解决方案完美,为什么你说它不起作用,我已经测试过了
      猜你喜欢
      • 2023-02-02
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多